Jason. Cała informatyka w jednym miejscu!

Przed Wami druga część miniserii dotyczącej pętli w języku C#. Przeanalizujemy sobie teraz czym się charakteryzuje i jak wygląda pętla "while" w języku C# względem poznanej wcześniej pętli "for".

PĘTLA "WHILE" W JĘZYKU C# TO DRUGA Z CZTERECH OPCJI

Pętla "podczas, gdy" (występująca w Javie, C++ i chyba w każdym innym języku programowania) różni się diametralnie od pętli "for" składnią, częściami i zachowaniem. Zobaczmy sobie najpierw jak to wygląda w całości:

while ([weryfikacja])
{
	// instrukcje
}

Inne słowo kluczowe ("while") nie budzi żadnych zastrzeżeń, jednak gdzie się podziała inicjacja i aktualizacja? Nie ma :O! O wyjście z pętli musimy już zadbać samodzielnie w sposób tradycyjny. Zakładając, że tu także chcemy uzależnić działanie od licznika, to postępujemy wówczas w taki oto sposób:

int i = 0;

while (i < 10)
{
	// instrukcje
	
	++i;
}

albo nieco prościej i bardziej profesjonalnie:

int i = -1;

while (++i < 10)
{
	// instrukcje
}

Wtedy "oplatamy" modyfikację w weryfikację i możemy pominąć inkrementację wewnątrz bloku (zwróćcie uwagę na "cofnięcie" wartości zmiennej "i"!!!). To już jak chcecie. Bez względu na okoliczności, zawsze musicie zdefiniować sobie nową zmienną przed wejściem do pętli "while", o ile nie uzależniamy warunku zakończenia od wyniku wywoływania funkcji "wszczepionego" bezpośrednio do nawiasów.

NAJLEPSZE ZASTOSOWANIE

Warto wiedzieć, że pętla "while" w języku C# sprawdza się średnio dla sytuacji, w których jest wiadoma liczba powtórzeń niezbędnych do wykonania zadania. Ponieważ ona nie posiada części inicjującej ani modyfikującej, trzeba to sobie zapewniać we własnym zakresie. Zdecydowanie lepiej jest jej użyć dla przypadków, kiedy nie mamy pojęcia jak długo pewne instrukcje mają się wykonywać. Przykładem może być wyszukiwanie najkrótszej ścieżki do celu. Czy będzie potrzebna zawsze tylko jedna iteracja? Nie! Dwie? Też nie. Cztery, dziesięć, osiemnaście? Nie! To idzie nieregularnie, dlatego w takich sytuacjach powinniśmy rozważać użycie pętli "while" zamiast pętli "for", choć nikt Wam niczego nie zabrania ;).

A to na odchodne. Prosty abstrakcyjny przykład kiedy pętla "while" jest najbardziej użyteczna. Działanie pętli uzależnione jest od funkcji zwracającej wartość logiczną. Nie potrzeba innych informacji ani danych tworzonych specjalnie dla tej pętli - wtedy interesuje nas jedynie wnętrze:

while (NotReachedTarget())
{
	// instrukcje
}

RYZYKO ZAWODOWE

Często jest tak, że istnieje ryzyko zapomnienia o ręcznym aktualizowaniu jakiegoś licznika, który odpowiada za warunek zakończenia. W ferworze programowania, możecie przykładowo zdefiniować zmienną, uzależnić warunek od jej wartości, ale modyfikacja już Wam umknie. I robi się klops! Kompilator nie będzie widział w tym błędu (bo de facto to nie jest żaden błąd ani składniowy, ani semantyczny) więc dojdzie do uruchomienia programu...i po wejściu do pętli się ona zatka! Nie znajdzie ujścia z powodu braku modyfikacji wartości, która ma wpływ na przebieg wykonywania. Zmienna iteracyjna jest, warunek jest, ale modyfikacji wartości co iterację już nie ma i nigdy nie dochodzi do fałszywego wyniku wyrażenia warunkowego. Z tego powodu uważam, że pętla "while" w języku C# nie powinna być używana przez początkujących w stosunku do manewrów, w których możemy wywnioskować ile razy mają się one wykonać, tylko w drugą stronę - kiedy nie sposób przewidzieć wymaganej liczby iteracji.

Pętla "while" w języku C#

Pętla "while" w języku C# pozbawiona jest części inicjującej i modyfikującej, co wymusza na nas samodzielne zadbanie o licznik (o ile jest potrzebny).


Przekazałem Wam wiedzę teoretyczną, garść porad i moje własne zdanie, uzyskując po połączeniu artykuł, który teraz przeczytaliście. O ile składni nie zmienicie, tak możecie wyrobić własne opinie i przyzwyczajenia do czego Was jak najbardziej nakłaniam ;). Jeśli nie będziecie mieli własnego zdania, to ktoś inny wpoi Wam swoje.

PODOBNE ARTYKUŁY