2011-02-06 7 views
7

Douglas Crockfod mówi, że zwykle lepiej jest refaktoryzować wewnątrz pętli continue.Dlaczego kontynuowanie pracy w pętli jest złym pomysłem?

Dlaczego nadal uważa się za złe w pętli?

+0

Zobacz również [dalej w pętli zagnieżdżonych podczas] (http://stackoverflow.com/ pytania/1133408/continue-in-nested-while-loops). Jest bardzo mało specyficznych dla języka C#, a wiele z podanych tam odpowiedzi jest znakomitych. –

Odpowiedz

1

Efekt continue jest w jakiś sposób porównywalny do goto na początku pętli. Dzięki temu Twój kod jest trudniejszy do zrozumienia - np. goto.

+7

-1 'if (...) {...} ...' jest nieco porównywalne do 'goto' do końca bloku. Poważnie, ślepe lekceważenie wszystkiego, co zdaje się przypominać wyspecjalizowany przypadek 'goto' jest tak samo szkodliwe, jak niegroźne nadużywanie niepoprawnych struktur kontrolnych (np. Używanie' goto', gdy istnieje struktura kontroli wyższego poziomu dla problemu będącego w zasięgu ręki). – delnan

+0

@delnan Istnieje znaczna różnica między rozgałęzieniem warunkowym w dół i nie-warunkowym rozgałęzieniem w górę. Jeśli kiedykolwiek przeczytasz złożony kod instalacyjny, będziesz wiedział dlaczego. Biorąc to pod uwagę, użycie 'goto' może być w rzeczywistości akceptowalne, ale tylko dla nie-warunkowego rozgałęzienia w dół. W przeciwieństwie do 'continue', które jest zepsute przez projekt, ponieważ zawsze rozgałęzia się w górę. Obecność 'continue' jest zawsze oznaką źle napisanej pętli, każda pętla, która go używa, może zostać przepisana w lepszy sposób. – Lundin

7

Używanie continue oznaczałoby, że masz niewystarczające warunki zapisane w twoim while.

Zamiast tego należy użyć if w pętli while lub dodać warunek do pętli while.

+2

+1 * Ten * jest (wyłącznie rozsądny) powód, aby uniknąć 'kontynuowania' (* w większości przypadków *, nie cały czas). – delnan

+0

-1 Po prostu powiedzenie "ponieważ' if' is better "nie odpowiada w ogóle na pytanie. – twiz

4

Korzystanie z goto, break, continue, throw lub return wewnątrz korpusu pętli może mieć również niepożądany efekt. Oto inny przykład, w którym kontrola pętli i ciało pętli są ściśle splecione. Czy pisze 1, 2 i 3 jak poprzednio? Jesteś pewny?

int value = 1; 
    for (;;++value) 
    { 
     cout << value << endl; 
     if (value != 4) 
      continue; 
     else 
      break; 
    } 

Możesz być myślenie, że doradza, aby nie używać stwierdzeń powrotne wewnątrz organów pętla nad gorliwy. Czy naprawdę tak myślę? Tak. Funkcje, które zwracają coś, powinny to zrobić za pomocą pojedynczej instrukcji return na samym końcu funkcji. Oto kilka praktycznych powodów dlaczego:

Link

Zastrzeżenie: Nie mój materiał, mam przywoływane z powrotem do źródła

Powiązane problemy