Instrukcja skoku: Różnice pomiędzy wersjami

Dodane 45 bajtów ,  15 lat temu
m
[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
TXiKiBoT (dyskusja | edycje)
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 (na Intelopochodnych <tt>JMP</tt> na [[x86]]) i warunkowego (na [[x86|Intelopochodnych]] <tt>JZ</tt>, <tt>JNZ</tt>, <tt>JG</tt>, <tt>JC</tt> itd, gdzie literki po <tt>J</tt> oznaczają stan flag oznaczających wynik ostatniej operacji).
 
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.
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]], iteratory[[iterator]]y, [[funkcja wyższego rzędu|funkcje wyższego rzędu]], [[wątek (informatyka)|wątki]] itd.
 
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]].