Instrukcja zagnieżdżona w programowaniu, to instrukcja zawarta w innej, zewnętrznej instrukcji strukturalnej. Obowiązuje tu bezwzględnie zasada, że cała instrukcja zagnieżdżona musi znajdować się w obrębie instrukcji zewnętrznej, tzn. oba nawiasy syntaktyczne wyróżniające instrukcję zagnieżdżoną, muszą znajdować się pomiędzy nawiasami syntaktycznymi instrukcji zewnętrznej. O ile taka zasada jest oczywista w przypadku, gdy instrukcją zagnieżdżoną jest instrukcja prosta, o tyle programista może popełnić błąd podczas kodowania określonego algorytmu, przy zagnieżdżaniu instrukcji strukturalnej. Tego typu błędy mogą być wyłapywane przez translator przed wykonywaniem programu.

+ Przykłady zagnieżdżenia instrukcji warunkowych i wyboru język programowania przykład opis Visual Basic, VBAIf warunek-1 Then ' (1) If warunek-2 Then ' (2) ' instrukcje End If Else Do While warunek-3 ' (3) ' instrukcje Loop End IfZarówno instrukcja warunkowa (2), jak i pętli repetycyjnej (3) są instrukcjami zagnieżdżonymi w instrukcji warunkowej (1). Pascalcase a of { 1 } 1 : case b of { 2 } 1..5 : { instrukcje } 6..10 : { instrukcje } else if c=1 then { instrukcja } else { instrukcja } { 3 } end 2 : { instrukcje } 3 : { instrukcje } else { instrukcje } end instrukcja warunkowa { 3 } jest zagnieżdżona w instrukcji wyboru { 2 } oraz { 1 }, zagnieżdżenie wielopoziomowe instrukcja wyboru { 2 } jest zagnieżdżona w instrukcji wyboru { 1 }

Jak z powyższego wynika, pojęcie instrukcji zagnieżdżonej nie dotyczy jakiejś konkretnej instrukcji realizującej określoną czynność, jednoznacznie zdefiniowanej w składni konkretnego języka programowania, lecz odnosi się do każdej instrukcji zawartej w innej instrukcji strukturalnej, a więc odnosi się do miejsca położenia danej instrukcji w kodzie źródłowym. Poziom takiego zagnieżdżenia jest praktycznie nieograniczony i zależy wyłącznie od możliwości systemu komputerowego. Przy zagłębieniu instrukcji w innej, która sama jest instrukcją zagnieżdżoną literatura przedmiotu używa pojęcia zagnieżdżenia wielopoziomowego, bądź wielokrotnego. Często spotykanym przypadkiem jest tworzenie pętli zagnieżdżonych dla operacji dotyczących tablic wielowymiarowych.

+ Przykłady wielopoziomowego zagnieżdżenia pętli Ada Visual Basic, VBA C pętla iteracyjna pętla iteracyjna pętla ogólna-- wyzerowanie elementów tablicy for i in Tablica'Range(1) loop for j in Tablica'Range(2) loop for k in Tablica'Range(3) loop Tablica(i, j, k):=0; end loop; end loop; end loop;' wyzerowanie elementów tablicy For I=0 To Max_I For J=0 To Max_J For K=0 To Max_K Let Tablica(I,J,K)=0 Next K Next J Next I/* wyzerowanie elementów tablicy */ for(i=0;i<maxI;i++) for(j=0;i<maxJ;j++) for(k=0;i<maxK;k++) Tablica[i][j][k]=0;

Z konstrukcją pętli zagnieżdżonych wiąże się zagadnienie używania dodatkowych instrukcji sterujących realizacją pętli, takich jak instrukcja opuszczenia, czy instrukcja kontynuacji. W wielu językach programowania instrukcje te odnoszą się zawsze do najbardziej zagłębionej pętli w strukturze kodu (a więc do pętli w której bezpośrednio zagnieżdżona jest dana instrukcja sterująca). Tak jest np. w języku C, C++, i pochodnych, Turbo Pascal, Visual Basic, VBA i wielu innych. Nie ma więc możliwości realizacji wyjścia z określonej pętli w całej hierarchii wielokrotnego zagnieżdżenia. Można ewentualnie korzystać w takim przypadku z instrukcji skoku, która jednak przez literaturę przedmiotu nie jest zalecana. Istnieją też języki programowania, w których składni zdefiniowano mechanizmy pozwalające na wskazanie, z której pętli ma nastąpić wyjście. Takie możliwości posiada np. język Ada, czy PL/I.

+ Przykłady wyjścia z określonej pętli zagnieżdżonej Ada PL/I-- wyjście z pętli 2-go poziomu loop1: for i in Tablica'Range(1) loop loop2: for j in Tablica'Range(2) loop loop3: for k in Tablica'Range(3) loop -- instrukcje exit loop2 when warunek-wyjścia; -- instrukcje end loop; end loop; end loop;-- wyjście z pętli 2-go poziomu loop1: DO WHILE warunek-1; loop2: DO WHILE warunek-2; loop3: DO WHILE warunek-3; /* instrukcje */ IF warunek-wyjścia THEN LEAVE loop2; /* instrukcje */ END; END; END;

Przypisy Podręcznik Visual Basic na Wikibooks

Podręcznik języka C na Wikibooks

Bibliografia

Kategoria:Konstrukcje programistyczne