W pętli C # (możesz swobodnie odpowiadać na inne języki), jaka jest różnica między break i kontynuuj jako sposobem na opuszczenie struktury pętli i przejście do następnej iteracji?
Przykład:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
c#
loops
enumeration
Seibar
źródło
źródło
continue;
zatrzyma przetwarzanie prądurow
i przejdzie do następnegorow
z kolekcji. Z drugiej stronybreak;
pozostawiforeach
instrukcję całkowicie, a pozostałe wiersze nigdy nie zostaną przetworzone.Odpowiedzi:
break
całkowiciecontinue
opuści pętlę, po prostu przeskoczy bieżącą iterację.Na przykład:
Przerwa spowoduje zamknięcie pętli przy pierwszej iteracji -
DoSomeThingWith
nigdy nie zostanie wykonana. To tutaj:Nie wykona
DoSomeThingWith
zai = 0
, ale pętla będzie nadal iDoSomeThingWith
będą realizowane doi = 1
celui = 9
.źródło
Naprawdę łatwym sposobem na zrozumienie tego jest umieszczenie słowa „pętla” po każdym ze słów kluczowych. Warunki mają teraz sens, jeśli są czytane jak codzienne frazy.
break
pętla - pętla jest przerywana i zatrzymuje się.continue
pętla - pętla kontynuuje wykonywanie przy następnej iteracji.źródło
break powoduje, że licznik programu wyskakuje z zakresu najbardziej wewnętrznej pętli
Działa tak
kontynuuj przeskakuje do końca pętli. W pętli for kontynuuj przeskakiwanie do wyrażenia przyrostowego.
Działa tak
źródło
for
pętli, ale czy to zadziała w przypadkuwhile
pętli testowanych przed i po ? Żegoto
prowadzi mnie notacji wierzyć tak, ale potrzebuję trochę weryfikacji.while
(„wstępnie przetestowane”), jak ido
-while
(„przetestowane”), pocontinue;
spełnieniu instrukcji, następną rzeczą, która się wydarzy, jest ocena warunku pętli w celu podjęcia decyzji, czy należy wykonać dodatkową iterację. Oczywiście,break;
gdy warunek pętli nie jest sprawdzany, pętla jest po prostu całkowicie opuszczana. Tak więcgoto
analogia jest dobra dla zrozumienia tego aspektu.Zawsze byłem zdezorientowany, czy powinienem użyć przerwy, czy kontynuować. To pomaga mi pamiętać:
Kiedy korzystać z opcji Break vs Kontynuuj?
źródło
break
foreach
całkowicie zatrzyma pętlę, przejdziecontinue
do następnegoDataRow
.źródło
Jest więcej niż kilka osób, które nie lubią
break
icontinue
. Ostatnia skarga, jaką o nich widziałam, była w JavaScript: The Good Parts autorstwa Douglasa Crockforda. Uważam jednak, że czasami użycie jednego z nich naprawdę upraszcza rzeczy, zwłaszcza jeśli twój język nie zawiera pętlido-while
lubdo-until
stylu.Zwykle używam
break
w pętlach, które szukają czegoś na liście. Po znalezieniu nie ma sensu kontynuować, więc równie dobrze możesz zrezygnować.używam
continue
gdy robię coś z większością elementów listy, ale nadal chcę pominąć kilka.break
Oświadczenie również jest przydatna, gdy odpytywanie dla ważnej odpowiedzi od kogoś lub czegoś. Zamiast:Możesz wyeliminować pewne powielanie i użyć:
do-until
Pętla już wcześniej wspomniano jest bardziej eleganckie rozwiązanie dla tego konkretnego problemu:Bez powielania i nie
break
jest również potrzebny.źródło
Wszyscy podali bardzo dobre wyjaśnienie. Nadal zamieszczam swoją odpowiedź, aby podać przykład, czy to może pomóc.
Oto wynik:
Zatem 3 [Wydrukowane] i 4 [Wydrukowane] nie będą wyświetlane, ponieważ występuje przerwa, gdy i == 3
Oto wynik:
Tak więc 3 [Wydrukowane] nie będzie wyświetlane, ponieważ jest kontynuowane, gdy i == 3
źródło
Złamać
Break zmusza pętlę do natychmiastowego wyjścia.
Kontyntynuj
Robi to przeciwieństwo przerwy. Zamiast przerywać pętlę, natychmiast pętli ponownie, pomijając resztę kodu.
źródło
Continue
nie jest przeciwieństwembreak
,break
zatrzymuje pętlę,continue
zatrzymuje bieżącą iterację.Prosta odpowiedź:
Break natychmiast opuszcza pętlę.
Kontynuuj rozpoczyna przetwarzanie następnego elementu. (Jeśli istnieją, przeskakując do linii oceny for / while)
źródło
Przez przykład
Drukuje 1, 2, 3 (na osobnych liniach).
Dodaj warunek przerwania dla i = 2
Teraz pętla drukuje 1 i zatrzymuje się.
Zastąp przerwę kontynuacją.
Teraz do zapętlenia wydruków 1 i 3 (pomijanie 2).
W ten sposób
break
zatrzymuje pętlę, acontinue
przeskakuje do następnej iteracji.źródło
Ruby niestety jest nieco inny. PS: Moja pamięć jest trochę mglista, więc przepraszam, jeśli się mylę
zamiast break / kontynuuj ma break / next, które zachowują się tak samo pod względem pętli
Pętle (jak wszystko inne) są wyrażeniami i „zwracają” ostatnią rzecz, którą zrobili. W większości przypadków uzyskanie wartości zwracanej z pętli jest bezcelowe, więc wszyscy po prostu to robią
Możesz to jednak zrobić
JEDNAK, dużo kodu ruby „emuluje” pętlę za pomocą bloku. Kanonicznym przykładem jest
Ponieważ ludzie znacznie częściej chcą robić rzeczy z wynikiem bloku, w tym miejscu robi się bałagan. break / next oznacza różne rzeczy w kontekście bloku.
break wyskoczy z kodu, który wywołał blok
next pominie resztę kodu w bloku i „zwróci” to, co określisz, do dzwoniącego bloku. Bez przykładów nie ma to sensu.
Więc tak. Ruby jest niesamowity, ale ma kilka okropnych skrzynek. Jest to drugi najgorszy, jaki widziałem w latach użytkowania :-)
źródło
Proszę pozwolić mi powiedzieć, co oczywiste: pamiętaj, że dodanie ani przerwania, ani kontynuowania, wznowi twój program; tzn. zostałem uwięziony dla określonego błędu, a następnie po zalogowaniu go chciałem wznowić przetwarzanie, a między kolejnymi wierszami było więcej zadań związanych z kodem, więc po prostu pozwoliłem mu przejść.
źródło
Aby całkowicie zerwać z pętli foreach, stosuje się break ;
Aby przejść do następnej iteracji w pętli, używana jest kontynuacja ;
Przerwa jest przydatna, jeśli przeglądasz kolekcję Obiektów (takich jak Wiersze w tabeli danych) i szukasz określonego dopasowania, gdy znajdziesz to dopasowanie, nie musisz kontynuować przez pozostałe wiersze, więc chcesz przerwać na zewnątrz.
Opcja Kontynuuj jest przydatna, gdy osiągniesz to, czego potrzebujesz po stronie iteracji pętli. Zwykle będziesz kontynuować po if .
źródło
jeśli nie chcesz używać break , po prostu zwiększ wartość I w taki sposób, że spowoduje to, że warunek iteracji będzie fałszywy, a pętla nie wykona się przy następnej iteracji.
źródło
Jeśli chodzi o inne języki:
źródło