2012-12-19 8 views
5

Jestem refactoring bardzo dużej metody z dużą ilością powtórzeń w nim.Przerwa w metodzie wywołanej z pętli

W metodzie istnieje wiele natomiast pętle, które obejmują:

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

chcę wyodrębnić tę metodę, ponieważ zdarza się 3 razy w tej jednej metody obecnie, ale kiedy to zrobić otrzymuję błąd w przerwie, ponieważ nie jest już w pętli. Problem polega na tym, że nadal konieczne jest wyjście z pętli while, ale tylko wtedy, gdy osiągnięta zostanie maksymalna liczba wyników.

Wszelkie sugestie?

+2

Dlaczego po prostu nie wrócić? –

Odpowiedz

3

Załóżmy, że metoda jest: Metoda

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; 
} 

połączenia z pętli jako:

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

Wielkie dzięki, brakowało mi tego, co oczywiste. – Carasel

+0

Zdarza się czasami :) Z przyjemnością pomożemy. – Amber

3

Nie można tego zrobić bezpośrednio.

Najczęściej chcesz przerwać, ponieważ znalazłeś rozwiązanie i nie musisz już szukać. Zatem w wywołanej funkcji wskaż, że nastąpił/był sukces, na przykład zwracając wynik lub wartość logiczną, aby wskazać powodzenie. A jeśli funkcja zwraca sukces, a następnie przerwać.

+0

Nawet gdyby było to możliwe, kod byłby nieczytelny. – jmrodrigg

+0

Wcale nie. Funkcja przyjmuje zadanie (na przykład decydując, czy działanie było sukcesem, czy wystarczy i wykonując akcję, gdy jest), a wynik tego jest używany do zatrzymania szukania. – Thirler

+0

Dzięki Thirler, właśnie tego potrzebowałem. – Carasel

0

Spróbuj przerwać pętlę w metodzie za pomocą return;

0

Jak Thriler mówi, że nie możesz tego zrobić bezpośrednio. Można wyodrębnić część, metody i zrobić coś takiego:

if(isTooManyResults(count)) { break; } 

Oczywiście metoda isTooManyResults musiałby powrócić true jeśli istnieje zbyt wiele wyników i false inaczej

1

Jeśli to jest teraz w metodzie zamiast pętli while zwracają wartość, a następnie łamią ją na podstawie tego.

tj

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; 
} 
Powiązane problemy