Najlepsze pytania
Chronologia
Czat
Perspektywa

Instrukcja warunkowa

Z Wikipedii, wolnej encyklopedii

Remove ads

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ć[1].

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.

Remove ads

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ść 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”.

Remove ads

Rodzaje instrukcji warunkowych

Podsumowanie
Perspektywa

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

Osobny artykuł: Operator warunkowy.

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[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

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' ]
Remove ads

Instrukcja wyboru

Osobny artykuł: 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

Osobny artykuł: 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

Więcej informacji Język programowania, Strukturalny If ...
Remove ads

Zobacz też

Przypisy

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads