@whiteman808, na niejednej produkcji widziałem XD
@whiteman808, Kiedy nieskończona pętla jest dobrym rozwiązaniem?
Główna pętla programu lub serwera
Jeśli masz program działający w trybie ciągłym (np. serwer, system obsługi zdarzeń), pętla nieskończona to naturalne rozwiązanie:
while (true) { handleRequests(); }
Przykłady: pętle gier, serwery HTTP, systemy czasu rzeczywistego.
Pętle obsługujące zdarzenia (event loop)
while (true) {
Event event = getNextEvent();
if (event == QUIT) break;
processEvent(event);
}
Przykłady: systemy operacyjne, GUI, game loop.
Makra i metaprogramowanie
W niektórych bibliotekach (np. w makrach preprocesora #define) nieskończone pętle są używane, aby zachować jednolitą strukturę kodu.
Kiedy unikać nieskończonych pętli?
Brak warunku wyjścia
Jeśli nie masz jasnego sposobu na przerwanie pętli, łatwo stworzyć zawieszenie programu (np. while (true) {} bez break).
Niepotrzebna alokacja CPU
Problem: Pusta pętla będzie zjadać 100% CPU:
while (true) {} // Źle! Rozwiązanie: Użycie sleep lub mechanizmu obsługi zdarzeń:
while (true) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); }
Zastępowanie warunkowych pętli (while lub for)
Lepsze podejście:
while (condition) { doSomething(); } Złe podejście:
while (true) { doSomething(); if (!condition) break; }
Czy warto zamieniać pętlę na return w if?
Jeśli Twoja pętla ma jeden warunek kończący, można użyć return, ale zależy od kontekstu.
Przykład: while (true) vs. return
Podejście z while (true):
void run() {
int x;
std::cin >> x;
if (x == 0) break;
std::cout << "Liczba: " << x << "\n";
Podejście z return:
if (x == 0) return;
W tym przypadku return upraszcza kod, bo nie musimy robić break, ale nie zawsze jest to najlepsze rozwiązanie.
Nieskończona pętla jest OK, jeśli wiesz, jak ją przerwać (break, return, sleep).
Używaj while (true) tylko tam, gdzie to logiczne (pętle zdarzeń, serwery, gry).
Zamiast while (true), lepiej używać while (condition), jeśli warunek jest znany wcześniej.
Jeśli chcesz uprościć kod, return zamiast break może być dobrym wyborem, ale nie zawsze.
Nie, są jak najbardziej dobre jeśli to najprostszy sposób zapisania logiki którą chcesz osiągnąć.
w taki sposób by uniknąć niepotrzebnych deklaracji zmiennych
To znaczy? W jaki sposób są niepotrzebne?
Jeśli masz na myśli zastąpienie
while (good) { ... if (costam) good = false; }
przez
while (true) { ... if (costam) break; }
To tak, to jest jak najbardziej OK.
93,434 zapytań
142,429 odpowiedzi
322,661 komentarzy
62,797 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto polecana książka warta uwagi.Pełną listę książek znajdziesz tutaj