thumb|170px|Diagram pętli for typu C Pętla – jedna z trzech podstawowych konstrukcji programowania strukturalnego (obok instrukcji warunkowej i instrukcji wyboru). Umożliwia cykliczne wykonywanie ciągu instrukcji określoną liczbę razy, do momentu zajścia pewnych warunków, dla każdego elementu kolekcji lub w nieskończoność.
Pętle licznikowe
Zawartość pętli licznikowych bądź iteracyjnych wykonuje się ustaloną liczbę razy. W najprostszym przypadku na początku pętli specjalna zmienna sterująca (licznikowa) jest ustawiana na wartość początkową, następnie przy każdym obiegu pętli jej wartość jest zwiększana o jeden, aż do osiągnięcia górnego limitu. Często pętla taka może odliczać w dół lub zmienna może być modyfikowana o wartość inną niż 1. Przykładami są tutaj pętle for z takich języków jak Pascal, Ada (ale nie C i C-podobne).
Pętle warunkowe
Ogólniejszą konstrukcją jest pętla warunkowa, nazywana również repetycyjną, która jest wykonywana, aż do odpowiedniej zmiany warunków. Przeważnie wyrażenie testujące sprawdzane jest na początku lub na końcu pętli. W niektórych językach (C-podobne) pętla jest wykonywana dopóki warunek jest spełniony, w innych, np. w Pascalu pętla repeat...until, dopóki warunek nie jest spełniony. Przykładami są instrukcje while, do...while, repeat...until.
Istnieją języki w których warunek (lub warunki) zakończenia mogą być umieszczone wewnątrz pętli na przykład w Adzie pętla loop z konstrukcją exit when.
Pętla ogólna
To pętla stosowana w językach rodziny C i C-podobnych, jak np. C++. Umożliwia definiowanie zarówno pętli repetycyjnej (ze sprawdzeniem warunku na początku pętli), jak i pętli iteracyjnej, jednak w porównaniu do niej pętla ta definiowana jest na niższym poziomie abstrakcji, co oznacza, że programista musi sam definiować warunek jej zakończenia i operację zmiany wartości zmiennej sterującej przy kolejnym przebiegu pętli.
Pętle „po kolekcji”
Często pożądane jest, aby instrukcje pętli zostały wykonane dla każdego elementu tablicy, kolekcji itp. Można to zrobić za pomocą powyższych pętli, ale często szybszym i bardziej przejrzystym sposobem jest użycie pętli typu foreach, która zwalnia programistę z obowiązku ręcznego iterowania po kolekcji.
Pętla o określonej liczbie powtórzeń W pewnych językach programowania zdefiniowano w ich składni konstrukcję pętli, w której programista podaje ilość powtórzeń iteracji. Nie specyfikuje się przy tym ani zmiennej sterującej, ani wartości początkowej i końcowej licznika, co stanowi zasadniczą różnicę w stosunku do pętli iteracyjnej (licznikowej).
+ Pętle o określonej liczbie powtórzeń w językach programowania Cobol Jean LogoPERFORM PROC N TIMES.1.1 instrukcja, N TIMESrepeat N instrukcja
Pętla nieskończona
W niektórych zastosowaniach, np. systemy operacyjne, serwery, środowiska sterowane zdarzeniami pożądane jest, aby główna pętla wykonywała się praktycznie w nieskończoność. Można to uzyskać wstawiając do pętli warunkowej odpowiedni niezmienny warunek, ale niektóre języki dostarczają środków, którymi można wyrazić to bezpośrednio np. w języku Ada, Forth, Icon.
Inne konstrukcje Istnieją także języki programowania zawierające w swojej składni instrukcje pętli zrywające z podanym wyżej podziałem. Przykładem takiego języka jest PL/1 i zdefiniowana w nim instrukcja DO. Instrukcja ta może (ale nie musi) zostać użyta z odpowiednimi frazami, definiującymi szczegółowo sposób iteracji, przy czym poszczególne frazy mogą być ze sobą zestawiane łącznie, co umożliwia bardziej złożone sterowanie w programie. I tak: instrukcja blokowa (grupująca): DO; ... END; pętla iteracyjna DO I=''w_p'' TO ''w_k'' BY ''step'', ''w_p1'' TO ''w_p2'' BY ''step2'', ...; ... END; przy czym frazy TO oraz BY są opcjonalne, można więc podać listę wartości, którą ma przyjmować zmienna sterująca, a przecinek umożliwia definicję kontynuacji iteracji dla kolejnego zestawu wartości. pętla repetycyjna DO WHILE ''warunek''; ... END; DO UNTIL ''warunek''; ... END; DO REPEAT ''wyrażenie''; ... END; pętla złożona – możliwość składania poszczególnych fraz iteracyjnych i repetycyjnych, np. DO WHILE C>A, I=1 TO 20 BY 3 UNTIL A<B, 31, 32, 36, 39 TO 41, REPEAT A/2 WHILE A>3; ... END;
Modyfikowanie przebiegu pętli Z pętlami w językach programowania związane są konstrukcje programistyczne umożliwiające modyfikowanie standardowego przebiegu realizacji pętli. Modyfikacja ta dotyczy takich elementów jak zmiana wartości zmiennej sterującej, wyjście z pętli, przejście do kolejnej iteracji itp. Do modyfikowania przebiegu realizacji pętli służą: albo istniejące danym języku konstrukcje, tj. instrukcje, które są stosowane także poza pętlą, np.: przypisanie: zmiana wartości zmiennej sterującej, instrukcja skoku: wyjście z pętli, albo specjalne konstrukcje dedykowane tylko do modyfikacji działania pętli, tj. takie które mogą być stosowane tylko w obrębie pętli, np. instrukcja opuszczenia, instrukcja kontynuacji, instrukcja powtórzenia bieżącej iteracji, instrukcja pomijania określonych iteracji. Instrukcje modyfikujące działanie pętli wymienione w drugiej grupie, zostały opracowane i uwzględnione w definicjach języków programowania, jako substytut instrukcji skoku, której użycie jest krytykowane w literaturze przedmiotu. Każda z operacji realizowanych przez tę grupę instrukcji może bowiem zostać zrealizowana za pomocą instrukcji skoku i etykiety umieszczonej w określonym miejscu. Instrukcja skoku pozwala w przeciwieństwie do tych instrukcji na przejście do dowolnego miejsca, natomiast instrukcje modyfikujące pętle z góry narzucają miejsce, do którego nastąpi przekazanie sterowania, co w pewnym stopniu zwiększa czytelność programu (kodu źródłowego) w porównaniu do instrukcji skoku.
Przykład – pętla iteracyjna
Poniżej przykład pętli w języku Pascal: var licznik : integer;
begin for licznik := 1 to 10 do WriteLn('Wiersz numer ', licznik); end.
Przykład w C++ jako wariant pętli ogólnej: for (int i = 0; i < 10; ++i) std::cout << i << "-ta iteracja." << std::endl;
Przykład w C jako wariant pętli ogólnej: int i;
for (i = 0; i < 10; ++i) printf("%d-ta iteracja.\n", i);
Przykład w PHP: for ($i = 0; $i < 10; ++$i) echo $i . "-ta iteracja.<br />\n";
Przykład w JavaScripcie: var i;
for (i = 0; i < 10; ++i) document.write(i + "-ta iteracja.<br />");
Przykład w VB6 z Textboxem Dim i As Integer Text1.Text = ""
For i = 0 To 10 Text1.Text = Text1.Text & i Next i
Przykład w VB6 z Debugwindow Dim i As Integer
For i = 0 To 10 Debug.Print i Next i
Przykład w Pythonie: for i in range(1, 10): print(i, '. iteracja', sep = '')
Pętle w językach programowania + Pętle w językach programowania język programowania pętla specjalne konstrukcje modyfikujące pętle iteracyjna repetycyjna ogólna po kolekcji powtórzeniowa złożona nieskończona opuszczenia kontynuacji powtórzenia pomijania ABAP Ada ALGOL 60 ALGOL 68 APL AWK B Basic | BCPL | Boo C C++ C-- C# Clipper Cobol Comal D dBase, FoxBase Eiffel Forth | Fortran IV, 66 Fortran 77 Fortran 90/95 Icon Java JavaScript Jean Logo MCPL | Modula-2 Oberon Object Pascal Pascal Perl PHP PL/I PL/M Prolog Python REXX | Ruby Simula 67 Snobol Turbo Pascal Visual Basic, VBA
Uwagi
Przypisy PN-75/T-42110, Język programowania Algol 60, Wydawnictwa Normalizacyjne (Polski Komitet Normalizacyjny), Warszawa 1976, opracowanie Polskiej Normy: Jowita Koncewicz, Maria Łącka, Instytut Maszyn Matematycznych w Warszawie.
Podręcznik języka C# na Wikibooks.
Podręcznik języka D na Wikibooks.
Podręcznik języka Fortran na Wikibooks.
Podręcznik języka Perl na Wikibooks.
Podręcznik języka PHP na Wikibooks.
Podręcznik języka Phyton na Wikibooks.
Podręcznik języka Ruby na Wikibooks.
Podręcznik Visual Basic na Wikibooks.
Kategoria:Konstrukcje programistyczne