2012-12-19 11 views
5

Ich Refactoring eine sehr große Methode mit einer Menge von Wiederholungen darin.Break in einer Methode aus einer Schleife

Bei dem Verfahren gibt es viele While-Schleifen, die einschließen:

if (count > maxResults){ 
     // Send error response 
     sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session); 
     break; 

ich dies als eine Methode zu extrahieren, weil es 3 mal zur Zeit in diesem Verfahren geschieht, aber wenn ich so bekomme ich eine Fehler in der Pause, da es sich nicht mehr in einer Schleife befindet. Das Problem ist, dass es immer noch notwendig ist, aus den while-Schleifen auszubrechen, aber nur wenn die maximale Anzahl von Ergebnissen erreicht ist.

Irgendwelche Vorschläge?

+2

Warum nicht einfach zurück? –

Antwort

3

Angenommen, die Methode ist:

public boolean test(int count, int maXResult) { 
if (count > maxResults) { 
     // Send error response 
     sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session); 
     return true; 
     } 
return false; 
} 

Call-Methode von der Schleife als:

while(testCondition) { 
    if (test(count, maxResults)) { 
    break; 
    } 
} 
+0

Vielen Dank, mir fehlte das Offensichtliche. – Carasel

+0

Es passiert manchmal :) Glücklich zu helfen. – Amber

3

Dies ist nicht direkt möglich.

Am häufigsten möchten Sie brechen, weil Sie die Lösung gefunden haben und nicht mehr suchen müssen. Geben Sie in der aufgerufenen Funktion an, dass ein Erfolg vorliegt/ist, indem Sie z. B. ein Ergebnis oder einen Booleschen Wert zurückgeben, um den Erfolg anzuzeigen. Und wenn die Funktion Erfolg zurückgibt, dann brechen Sie ab.

+0

Selbst wenn es möglich wäre, wäre der Code unverständlich. – jmrodrigg

+0

Überhaupt nicht. Die Funktion übernimmt eine Aufgabe (z. B. die Entscheidung, ob die Aktion erfolgreich war, oder genug, und wenn eine Aktion ausgeführt wird), und das Ergebnis davon wird verwendet, um nicht mehr zu suchen. – Thirler

+0

Danke Thirler, genau was ich brauchte. – Carasel

0

Versuchen Sie, die Schleife in der Methode mit return zu unterbrechen;

0

As Thriler sagt, Sie können es nicht direkt tun. Man könnte einen Teil davon auf das Verfahren extrahieren und wie etwas tun:

if(isTooManyResults(count)) { break; } 

Offensichtlich Ihre isTooManyResults Methode müßte zurückkehren true, wenn es zu viele Ergebnisse und false sonst

1

Wenn es nun in einem Verfahren ist anstelle der while-Schleife gibt es einen Wert zurück und bricht dann basierend darauf ab.

d.h.

public bool refactoredMethod(parameters) 
{ 
    if (count > maxResults){ 
    // Send error response 
    sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your  search"), out, session); 

    return true; 
    } 

    return false; 
} 
Verwandte Themen