Trzeci z rzędu materiał poświęcony pętlom 🧨! Ostatnia z podstawowych jakie występują w programowaniu, to pętla "do while" 💥! Wejdź do środka artykułu, dowiedz się co to za pętla, jak wygląda jej budowa i czym się różni od ukazanej wcześniej pętli "while" (tu jest odnośnik) 👀!

PĘTLA "DO WHILE" W PROGRAMOWANIU JAKO TRZECIA "FORMA" PĘTLI

Jak zwykle, najpierw szybkie wyjaśnienie co to za pętla, później najczęściej spotykana budowa, a na końcu przykład ⏩!

CZYM JEST PĘTLA "DO WHILE" W PROGRAMOWANIU?

W programowaniu, pętla "do while" jest konstrukcją służącą do wykonywania określonego bloku kodu (serii instrukcji) wielokrotnie 🔁. Występuje jako jedna z trzech podstawowych postaci pętli jakie występują w największej liczbie różnych języków programowania (pozostałe to "for" i "while", wyjaśnione tutaj i tutaj ℹ️). Również i w tym przypadku stanowi fundament, bez którego programy wymagające powtórzenia określonych instrukcji pewną liczbę razy, byłaby niewykonalna 🔥!

Pętla "do while" jest bardzo rzadko stosowana w praktyce ze względu na jej zasadę działania "odwrotną" do pętli "while". Tutaj także za rozstrzyganie kontynuowania powtarzania instrukcji odpowiada ten sam warunek wejścia (a więc z niej także najlepiej skorzystać do sytuacji, w których nie możemy przewidzieć z góry liczby niezbędnych powtórzeń), natomiast charakteryzuje się subtelną acz ważną różnicą: najpierw wykonuje, a potem sprawdza ⚠️! A to oznacza, że zawsze wykona instrukcje przynajmniej jeden raz, niezależnie od tego, czy warunek jest spełniony, czy nie 💥! To jest najważniejsza informacja na temat pętli "do while" 🚨!

Warto również mieć świadomość, że nie każdy język programowania posiada pętlę "do while".

KIEDY NAJLEPIEJ UŻYĆ PĘTLI "DO WHILE" W PROGRAMOWANIU?

Pętla "do while", ponieważ zawsze w pierwszej kolejności wykonuje instrukcje, a potem bada warunek wejścia, może się przydać jedynie w przypadkach, gdy coś powinno się wykonać bez względu na wszystko 👍. Przykładem jaki można łatwo sobie wyobrazić jest wyświetlenie listy opcji do wybrania jednej z nich (tak jak menu główne w grach). Czy użytkownik będzie chciał z niego korzystać, czy tylko wszedł przez pomyłkę i planuje stąd wyjść, zawsze pojawia się lista opcji. To jest coś, co widzimy za każdym razem.

Jeżeli jest inaczej, wtedy lepiej skorzystać z pętli "while" opisanej tutaj, która najpierw sprawdza warunek wejścia, a potem dopiero wykonuje instrukcje. Chociaż moim zdaniem i tak lepiej ograniczać się tylko do pętli "while", bo "do while" jest rzadko stosowaną formą i przez swoje gwarantowane jednokrotne wykonywanie sprawia wrażenie posiadania mniejszej kontroli nad przepływem programu. To jest tylko moja obserwacja, więc jeżeli wolisz korzystać z "do while" (o ile to dotyczy przypadków opisanych powyżej ⚠️), to korzystaj z tego śmiało!

Pokażę Ci teraz jak powstaje pętla "do while"!

JAK UTWORZYĆ PĘTLĘ "DO WHILE" W PROGRAMOWANIU?

Pętla "do while" przyjmuje następującą postać 👇:

do
{
	[instrukcje]
}
while ([warunek wejścia]);

Widać od razu, że mocno odbiega od pętli "while" (link do artykułu) mimo bliskiej zbieżności nazw 🙂. Zobacz, że poza dodatkowym słowem kluczowym "do", reszta elementów jest taka sama. Ponadto zwróć uwagę gdzie znajduje się warunek wejścia (razem z hasłem "while")! W ten sposób dużo łatwiej zapamiętać tę "odwrotność", że pętla "do while" najpierw wykonuje wszystkie instrukcje, a potem sprawdza czy trzeba je powtórzyć ✅. Natomiast jest drobna pułapka składniowa - średnik zaraz po nawiasie zamykającym 💥! Dla pętli "while" go nie wstawiamy, a tutaj musimy ⚠️!

Sam warunek tworzymy również bez zmian, przy pomocy operatorów relacyjnych i logicznych (te drugie są przydatne do tworzenia złożonych warunków, takich jak koniunkcja czy alternatywa), dokładnie jak podczas tworzenia instrukcji warunkowych ℹ️.

Funkcjonowanie pętli "do while" przebiega tak 👇:

  • wykonanie wszystkich instrukcji zawartych w środku (bez względu na warunek!),
  • zbadanie warunku wejścia czy jest spełniony,
  • jeżeli jest:
    • wykonanie wszystkich instrukcji zawartych w środku,
    • powrót do punktu zbadania warunku wejścia,
  • jeżeli nie jest, to przerwanie pętli i przejście do dalszych instrukcji.

Warunek wejścia to moment, w którym program ustala czy trzeba wykonać jeszcze jedno powtórzenie ⏏️. W grę wchodzi wyrażenie dowolnego typu ☑️. Może to być badanie czy wartość liczbowa już przekracza określony przez nas próg (co bardziej będzie pasować do pętli "for", gdyż tam znajduje się miejsce na zmienną iteracyjną) 👇:

i < 10

bądź coś, czego nie da się przewidzieć w którym momencie nastąpi, na przykład 👇:

randomNumber == 1

Losowanie liczby z określonego przedziału i sprawdzania czy akurat jest liczbą X, jest dobrym przykładem sytuacji, w której nie wiemy kiedy to nastąpi ❓. Dlatego też pętla "do while" (jak również "while") będzie bardziej pasować do takich wyrażeń.

Obowiązuje ta sama reguła jak przy pętli "while", jeśli chodzi o samodzielne dbanie o wyjście z pętli ⚠️. Bez względu na wszystko, pamiętaj że jest niezmiernie istotne zbudować taki warunek, aby za którymś razem był niespełniony, ponieważ taka pętla będzie chodzić w nieskończoność, co doprowadza do zawieszenia się programu 🔒! W to samo miejsce możesz też wstawić stałe wartości logiczne "true" i "false", jednak to nie będzie miało cokolwiek wspólnego z sensownym działaniem 😊. Gdybyś jednak wstawił(a) wartość "false", to możesz doświadczyć "zong" z tego powodu, iż pętla mimo wszystko wykona jeden raz swoje instrukcje 😮!

Wszystko wyjaśnione na temat samej pętli ✅. Przystępujemy do ukazania przykładu praktycznego użycia pętli "do while" 🚀!

PRZYKŁAD UŻYCIA PĘTLI "DO WHILE" W PROGRAMOWANIU

Poniższy przykład to komunikat o wprowadzeniu dowolnego znaku, wypisywanie go i sprawdzenie czy równa się małej literze 'q' (od "quit") 🔁. Używając języka C, możemy to napisać w taki sposób 👇:

#include <conio.h>
#include <stdio.h>

int main(void)
{
	char character;

	do
	{
		printf("Podaj dowolny znak ('q' zamyka program): ");

		character = getch();

		printf("%c\n", character);
	}
	while (character != 'q');

	return 0;
}

Teraz wyjaśnienie poszczególnych wierszy 👍.

Aby móc pobierać znaki wprowadzane z klawiatury bez każdorazowego zatwierdzania klawiszem Enter (wejście niebuforowane), należy dołączyć plik nagłówkowy z funkcją, która pozwala na pobieranie znaków w taki sposób. W tym przypadku, zapis zależy od systemu operacyjnego 💥! W systemie Windows bez problemu zadziała dołączenie pliku "conio.h" i użycie funkcji "getch", natomiast dla pozostałych systemów (Mac i Linux) trzeba ten kod napisać zupełnie inaczej i poszukać u innych źródeł informacji który plik dołączyć, aby uzyskać dostęp do właściwej funkcji, która pozwoli na to samo 😬. Dlatego też przestrzegam, że powyższy zapis został sprawdzony na systemie Windows ⚠️.

Na początku dołączamy sobie u góry plik "conio.h" zawierający funkcję przeznaczoną do pobierania wciśniętych znaków klawiatury i automatycznego pójścia dalej, "getch" ☑️. W środku funkcji "main" tworzymy zmienną typu "char", która posłuży do przechowywania wciśniętego znaku co każdą iterację pętli 🅰️.

W dalszym ciągu znajduje się pętla "do while" 🔁. Jej instrukcje polegają na 👇:

  1. wypisaniu komunikatu o wprowadzeniu dowolnego znaku z klawiatury i że mała litera 'q' kończy działanie programu (korzystamy z funkcji "printf"),
  2. pobieraniu znaku z klawiatury poprzez przypisanie wyniku funkcji "getch" do zmiennej,
  3. wypisaniu wprowadzonego znaku w tym samym wierszu i przejściu do następnego wiersza za pomocą "znaku ucieczki" i kombinacji "\n".

Warunkiem wejścia jest sprawdzenie czy podany znak to mała litera 'q' 🔍. Jeżeli się okaże, że podano tę literę już za pierwszym razem, to program kończy swoje działanie. W przeciwnym razie ponownie wykonuje instrukcje w punktach 1-3 🙂.

Uruchamiając program, zauważysz komunikat o podaniu dowolnego znaku z klawiatury i ciągłego wypisywania, aż do podania małej litery 'q' 😊. Użycie pętli "do while" dla tego przypadku jest jak najbardziej poprawne i logiczne, gdyż najpierw wyświetlamy informację użytkownikowi o podjęciu jakiejś akcji, a potem oczekujemy aż ją wykona ✅. Do pętli "while" musielibyśmy wstawić ten sam ciąg instrukcji jeszcze przed wejściem do niej, tak aby zachować ten sam ciąg zdarzeń, gdyż tam warunek wejścia sprawdzany jest jako pierwszy 💡.

Pętla "do while" w programowaniu

Pętla "do while" posiada strukturę i zachowanie bardzo podobne do pętli "while", aczkolwiek tutaj najpierw zostają wykonane wszystkie instrukcje, a potem sprawdzany jest warunek wejścia, czyli zawsze wykona się co najmniej jeden raz!


Koniec tematu 🙂. Poznałeś(-aś) pętlę "do while" jaka występuje w programowaniu i od tej pory powinieneś/powinnaś już wiedzieć czym się różni od pętli "while" 😉.

PODOBNE ARTYKUŁY