poniedziałek, 11 czerwca 2012


Instrukcja warunkowa


Instrukcja warunkowa jest elementem języka programowania, które pozwala na wykonanie różnych obliczeń w zależności od tego czy zdefiniowane przez programistę wyrażenie logiczne jest prawdziwe, czy fałszywe. Możliwość warunkowego decydowania o tym, jaki krok zostanie wykonany w dalszej kolejności jest jedną z podstawowych własności współczesnych komputerów – dowolny model obliczeń zdolny do wykonywania algorytmów (tj. równoważny maszynom Turinga) musi ją posiadać[1].
W imperatywnych językach programowania używa się terminu instrukcja warunkowa, podczas gdy w programowaniu funkcyjnym preferowane są nazwy wyrażenie warunkowe lubkonstrukcja warunkowa, gdyż posiadają one inną zasadę działania.

Warunki w maszynach Turinga

W teorii złożoności obliczeniowej maszyna Turinga jest wzorcowym, matematycznym modelem obliczeń komputerowych zdolnym do wykonywania algorytmów[2]. Składa się ona z nieskończonej taśmy podzielonej na komórki z symbolami oraz głowicy. W każdym kroku głowica może zmienić symbol nad aktualnie przeglądaną komórką, zmienić swój stan oraz przesunąć się w lewo lub w prawo. Program definiowany jest jako tablica stanów i dopuszczalnych przejść między nimi w zależności od widzianego symbolu[3]. Możemy ją rozpatrywać jako rodzaj warunku, a każdy krok obliczeń – jako jego ewaluację[4]. Przykładowo, element tablicy przejść \delta (2, a) \rightarrow (4, c, \leftarrow) może być rozumiany jako warunek "jeśli jesteśmy w stanie 2 i widzimy symbol a, przechodzimy do stanu 4, zapisujemy symbol c i przesuwamy się w lewo"

Rodzaje instrukcji warunkowych

We współczesnych językach programowania można spotkać wiele rodzajów instrukcji warunkowych.

If-Then

Podstawowym rodzajem instrukcji warunkowej jest If-Then. Jest spotykany w większości języków programowania i umożliwia warunkowe wykonanie określonego bloku kodu, a jeśli warunek nie jest spełniony – alternatywnego bloku. Pomiędzy językami występują nieznaczne różnice składniowe, ale ogólny schemat w pseudokodzie zawsze wygląda następująco:
if warunek then
    właściwy blok kodu
else
    alternatywny blok kodu
end if
Na początku wykonywana jest ewaluacja warunku podanego w postaci wyrażenia logicznego. Jeśli wynikiem jest true, wykonywany jest właściwy blok kodu, a jeśli false – alternatywny. Następnie program kontynuuje od pierwszej komendy po end if.
Wiele języków programowania umożliwia zdefiniowanie więcej niż jednego warunku do sprawdzenia przy pomocy opcjonalnego bloku else-if:
if warunek 1 then
    pierwszy blok kodu
else-if warunek 2 then
    drugi blok kodu
else-if warunek 3 then
    trzeci blok kodu
else
    alternatywny blok kodu
end if
W tym wypadku warunki ewaluowane są po kolei do momentu, gdy któryś z nich nie da wartości true – wykonywany jest wtedy przypisany mu blok kodu. Jeśli żaden z warunków nie będzie prawdziwy, wykonywany jest blok alternatywny. Bez względu na ilość prawdziwych warunków, zawsze wykona się tylko pierwszy z nich, a pozostałe zostaną pominięte.
W pewnych językach programowania dostępna jest konstrukcja analogiczna do opisanej wyżej instrukcji warunkowej, której działanie jest jednak odwrotne do powyższego, tzn.pierwszy blok kodu wykonywany jest, gdy warunek 1 nie jest spełniony, a inne warunki fraz else w przeciwnym razie. Jest to więc równoważnik konstrukcji if not(warunek)then instrukcja. Dla odróżnienia od konstrukcji pierwotnej stosuje się w tym przypadku inne słowo kluczowe, np. unless, w języku BCPL[5] i pochodnych (np. w język MCPL[6]), czy także w Perl[7]
.

Wyrażenia warunkowe

Wyrażenie warunkowe jest odmianą instrukcji warunkowej If-Then z tą różnicą, że wykonany blok kodu musi zwrócić jakąś wartość, która staje się jednocześnie wynikiem całego wyrażenia. Wyrażenia warunkowe są popularne w funkcyjnych językach programowania.

Operator trójargumentowy

W językach wywodzących się z C dostępny jest trójargumentowy operator zwany także operatorem wyrażenia warunkowego. Schemat składni jest następujący:
(warunek) ? (wyrażenie, gdy warunek jest prawdziwy) : (wyrażenie, gdy warunek jest fałszywy)
Efektem jego działania jest wartość drugiego lub trzeciego wyrażenia. Umożliwia on osadzanie warunków wewnątrz wyrażeń, np.
zmienna = (a > 5) ? (a * 7) : (a - 3);

Jako funkcja

W językach Visual Basic oraz SQL warunek jest funkcją trójargumentową. Działa ona trochę inaczej, niż klasyczne wyrażenie warunkowe, gdyż w trakcie wykonywania obliczana jest zawsze zarówno "prawdziwa", jak i "fałszywa gałąź", a funkcja zwraca po prostu wynik jednej z nich, drugi odrzucając.

Arytmetyczny If

Język Fortran do wersji Fortran 77 obsługiwał tzw. arytmetyczny If będący czymś pomiędzy klasycznym Ifem, a przypadkiem instrukcji wyboru bazującym na trychotomii x < 0,x = 0x > 0. Był to najwcześniejszy rodzaj instrukcji warunkowej spotykanej w tym języku[8].:
IF (e) label1, label2, label3
Gdzie e to dowolne wyrażenie numeryczne. Powyższy zapis jest równoważny następującemu:
IF (e .LT. 0) GOTO label1
IF (e .EQ. 0) GOTO label2
IF (e .GT. 0) GOTO label3

Brak komentarzy:

Prześlij komentarz