Instrukcja warunkowa – element języka programowania, który pozwala na wykonanie różnych instrukcji 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ć.

W imperatywnych językach programowania używa się terminu instrukcja warunkowa, podczas gdy w programowaniu funkcyjnym preferowane są nazwy wyrażenie warunkowe lub konstrukcja 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. 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. Możemy ją rozpatrywać jako rodzaj warunku, a każdy krok obliczeń – jako jego ewaluację. Przykładowo, element tablicy przejść 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 i pochodnych (np. w język MCPL), czy także w Perl.

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 Był to najwcześniejszy rodzaj instrukcji warunkowej spotykanej w tym języku:

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

Implementacja obiektowa w Smalltalku Smalltalk to język w pełni obiektowy. Warunki nie są tam instrukcją języka, lecz metodą klasy Boolean przyjmującą dwa domknięcia jako argumenty. Klasa Boolean posiada dwie klasy podrzędne: True, która wykonuje tylko pierwsze z domknięć, oraz False wykonującą drugie:

var := condition ifTrue: [ 'foo' ] ifFalse: [ 'bar' ]

Instrukcja wyboru

Innym rodzajem instrukcji warunkowej jest Instrukcja wyboru, która dopasowuje obliczoną wcześniej wartość do zdefiniowanych ograniczeń i wykonuje akcję przyporządkowaną pierwszemu z nich, który zostanie poprawnie dopasowany.

Dopasowanie do wzorca

Bardziej wyspecjalizowaną odmianą instrukcji warunkowych jest Dopasowanie do wzorca spotykane w niektórych językach programowania. Jego specjalizacja polega na możliwości analizy budowy złożonych struktur danych oraz automatycznego rozpakowywania z nich wartości do zmiennych.

Porównanie języków Język programowania Strukturalny If Instrukcja wyboru Arytmetyczny If Dopasowywanie do wzorca then else else-if Ada C C++ C# Comal Eiffel F# Forth Fortran Haskell Java JavaScript Modula 2 Pascal Perl PHP PL/1 PL/M Python Snobol QuickBASIC Visual Basic Visual Basic .NET Windows PowerShell

Zobacz też Instrukcja (informatyka) Instrukcja wyboru Dopasowanie do wzorca

Przypisy Podręcznik języka Perl na Wikibooks.

Kategoria:Konstrukcje programistyczne