m
→Jak można sterować przepływem kontroli: linki
[wersja nieprzejrzana] | [wersja nieprzejrzana] |
Usunięta treść Dodana treść
m robot dodaje: sh:GoTo |
|||
Linia 22:
== Jak można sterować przepływem kontroli ==
Aby sterować przepływem kontroli w programie w sposób, który umożliwia zaprogramowanie każdego diagramu przepływu czy każdego [[automat o skończonej liczbie stanów|automatu o skończonej liczbie stanów]] bez duplikacji kodu wystarczy jedna instrukcja <tt>if (warunek) { goto X; }</tt>, ze szczególnym przypadkiem <tt>if (prawda) { goto X; }</tt>. Tak jest to rozwiązane na poziomie [[asembler]]a - dostępne są jedynie instrukcje skoku bezwarunkowego (
W [[Fortran|Fortranie]] pierwotnie jedyną instrukcją warunkową był właśnie skok - nie można było warunkowo przypisać wartości czy wykonać grupy poleceń. Było to z jednej strony całkowicie wystarczające, z drugiej zaś mało ekspresywne.
Z czasem dodawano nowe instrukcje kontroli przepływu: wykonania warunkowego (<tt>if (warunek) { POLECENIE1 } else { POLECENIE2 }</tt>, kilku typów pętli (<tt>while</tt>, <tt>for</tt>), funkcje rekurencyjne, instrukcje ponowienia (<tt>redo</tt>), [[Instrukcja kontynuacji | następnej iteracji]] (<tt>next</tt> lub <tt>continue</tt>) lub [[Instrukcja opuszczenia | zakończenia wykonywania]] (<tt>last</tt> lub <tt>break</tt>) pętli,
te same instrukcje z wielopoziomowymi pętlami (<tt>X: foreach $a(@A) { foreach $b(@B) { ...; if (...) { last X; }} }</tt>), [[wyjątek|wyjątki]],
Są one dużo bardziej ekspresywne od <tt>goto</tt>, którego programiści piszący w wysokopoziomowych językach programowania powinni unikać. Jednak czasami takiej możliwości nie mają piszący w językach z relatywnie ubogimi strukturami kontroli przepływu, takimi jak [[C (język programowania)|C]] czy [[Basic]].
|