2015-04-15 15 views
6

Używam podczas prawdziwej pętli w wielu projektach. Służy mi dobrze i nie jest zbyt skomplikowana. Więc, dlaczego nie jest dobrym pomysłem, aby używać podczas prawdziwej pętli nieskończenie działa procesów w tle. Dziękuję za odpowiedzi.Dlaczego (prawda) jest zła praktyka?

+4

'while (true)' nie jest złą praktyką. Pewne zastosowania 'while (true)' są złym zwyczajem, głównie zajętym-czekaniem, gdzie inne rodzaje oczekiwań byłyby bardziej odpowiednie, ale nie ma nic złego w samym 'while (true)'. – user2357112

+2

Dlaczego mówisz, że to zły pomysł? – user2357112

+0

Tak długo, jak wiesz, co robisz i masz czysty sposób na wydostanie się z niego, nie jest to zła praktyka. – Morb

Odpowiedz

4

Mój kierownik projektu nie pozwala na tego rodzaju pętli w kodzie, on twierdząc, że musi być zastąpiona przez while(!exit_flag)

To bardzo wątpliwe . while (!exit_flag) sugeruje, że pętla ma naturalny stan wyjścia, który osiągnie w pewnym określonym punkcie sam, np. coś licząc od 0 do 100, a następnie opuszczając pętlę. Jednakże, jeśli piszesz tę pętlę, aby utworzyć stałego demona lub pętlę zdarzeń, to punktem tej pętli jest utrzymywanie programu w nieskończoność. Nic nie mówi bezterminowo lepiej niż while (true).

Nie ma prawdziwej technicznej różnicy między obiema; to tylko kwestia czytelności i ekspresji intencji. Oczywiście musisz to zrobić z ludźmi, którzy na końcu przeczytają ten kod. Jeśli ich polityka to while (!exit_flag), niech tak będzie.

4

To nie jest zła praktyka, to po prostu oznacza, że ​​nie pomyliłeś kodu.

Warunek jest wymagany, aby powiedzieć pętli, kiedy zakończyć pętlę. Jeśli masz punkt końcowy, dlaczego nie umieścić go jako warunek?

var i = 0; 
while(true){ 
    i++; 
    if(i == 100) 
     break; 
} 

Ten kod jest w porządku. Ale tak to jest:

var i = 0; 
while(i != 100){ 
    i++; 
} 

Obie metody są prawidłowe, ale jeśli ktoś czyta kod, jest o wiele łatwiej zobaczyć, gdy pętla zatrzyma Iteracja jeśli jest tam w stanie.

4

Hm, zapytaj tego, który twierdził, że to "zły pomysł".

Mogłem myśleć o tym, że jakakolwiek pętla działająca w nieskończoność musi w pewnym momencie się skończyć, chyba że, oczywiście, oczekujesz, że twój program będzie działać wiecznie.

Jeśli nie podano żadnych kryteriów do zakończenia, musiałby istnieć jakiś inny mechanizm do zakończenia pętli ukrytej gdzieś w pętli kodu, np. Powrót, przerwa lub (fuj - Podstawowy - ale to prawdopodobnie tam, gdzie początek instrukcji - instrukcja "Goto" skacząca gdzieś poza pętlą), aby zakończyć pętlę.

Kod taki jak ten może być trudny do odczytania i debugowania, a poprzednio wskazywał, że programista nie przejmował się pisaniem czystego kodu. Niemniej jednak w dzisiejszych czasach z aplikacjami sterowanymi zdarzeniami i strukturalnymi metodami obsługi błędów (zobacz try ... catch struktur) istnieją czyste i łatwe do odczytania sposoby wychodzenia z dowolnego rodzaju pętli w dowolnym momencie, więc podczas gdy (true) można używać bez kłopotów.

Greetz

Alina

Powiązane problemy