Instrukcja warunkowa – stawiamy warunki komputerom!

W dzisiejszym odcinku programowania dla nieprogramistów wyjaśnię Wam jak dyktować komputerowi warunki, czyli opowiem o instrukcji warunkowej będącej fundamentem wszelkich decyzji podejmowanych przez komputery. Oczywiście zobaczymy też przykład użycia jej w kodzie 🙂

Zacznijmy tradycyjnie od krótkiej definicji, a później przełóżmy ją na bardziej przyjazny i zrozumiały język.

Co to jest instrukcja warunkowa?

Instrukcja warunkowa jest to 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.
Innymi słowy jest to instrukcja, która umożliwia Naszemu programowi podejmowanie decyzji. Podobnie jak my podejmujemy setki, jak nie tysiące drobnych decyzji każdego dnia, tak samo dzieje się w programach komputerowych. Przykładem może być np. decyzja o tym jak zamierzamy rano dotrzeć do szkoły czy pracy. Np. jeśli pada deszcz, możemy zdecydować się podjechać autobusem, czy samochodem, a jeśli jest ładna pogoda możemy wybrać spacer czy dojazd rowerem.
Innym przykładem może być robienie zakupów. Jeśli mamy ograniczony budżet, to możemy porównać ceny i wybrać tańszy produkt. Tak więc sami widzicie, że takich odpowiedników instrukcji warunkowych przetwarzamy dziennie mnóstwo.

Czym jest instrukcja warunkowa w praktyce?

Zanim przejdziemy do formalnych przykładów użycia funkcji warunkowej w kodzie różnych języków programowania, pozwólcie, że omówię generalny schemat wyglądu takich funkcji warunkowych, bo jest on dość uniwersalny i podobnie zapisywany w wielu językach programowania.
Tak naprawdę najczęściej jest to praktycznie prawie 100% przełożenie z języka naturalnego, a mianowicie załóżmy, że żona wysyła Nas do sklepu po pieczywo i mówi:

„jeżeli będą świeże bułki, to kup 5 sztuk, w przeciwnym razie kup chleb”

natomiast programując w Naszego małego robocika (znanego z poprzednich odcinków) w np. pythonie, zapisalibyśmy to tak:

if sa_swieze(bulki):
    kup(bulki, 5)
else:
    kup(chleb, 1)

Oczywiście ogólnie przyjęte jest raczej pisanie nazw funkcji i zmiennych po angielsku, ale nie chciałem już komplikować zapisu.
W powyższym przykładzie jak widzimy mamy słowo kluczowe if, po którym wywoływana jest funkcja sa_swieze z parametrem bulki, która załóżmy, że jest w stanie sprawdzić czy dany towar, w tym przypadku bułki, jest dostępny i czy jest jednocześnie świeży, a na koniec zwraca nam wartość logiczną prawda lub fałsz. O funkcjach i procedurach mówiłem w poprzednim odcinku z tej serii, więc serdecznie zapraszam do obejrzenia go, jeśli działanie funkcji i procedur nie jest dla Was w pełni jasne.
Po wywołaniu funkcji, będącej Naszym wyrażeniem logicznym mamy znak dwukropka, który w wielu innych językach programowania jest zastępowany słowem kluczowym then.
W kolejnej linijce mamy użycie funkcji kup z parametrami bulki i 5, która to dokonuje zakupu produktu będącego pierwszym jej argumentem, w ilości branej z drugiego jej argumentu. Oczywiście może to być więcej niż jedna funkcja i tak też zwykle w programowaniu to wygląda, że po podjęciu decyzji na podstawie instrukcji warunkowej program wykonuje cały blok instrukcji.
Mnie nawet uczono na studiach, że bardziej elegancko jest upewnić się, że większa część kodu wykona się przy prawdziwości warunku logicznego, a więc w tej sekcji bezpośrednio „po ifie” niż w sekcji przewidzianej dla sytuacji w której wyrażenie logiczne zwraca fałsz.
No właśnie, w kolejnej linijce pojawia się Nam słowo kluczowe else również zakończone dwukropkiem, które z jednej strony kończy blok poleceń wykonywanych przy prawdziwości warunku logicznego, a zaczyna blok instrukcji wykonywanych, gdy wyrażenie logiczne jest nie prawdziwe, czyli jest fałszywe.
Podobnie jak „po ifie” pojawia się Nam tutaj ponownie funkcja kup, którą w tym przypadku dokonamy zakupu 1szt. chleba zgodnie z życzeniem małżonki 🙂

Jak wygląda instrukcja warunkowa w kodzie?

W pythonie już wiecie jak zapisać instrukcję warunkową. Teraz czas pokazać Wam jak wygląda ten zapis w innych językach programowania:

bash

if sa_swieze "bulki"
then
    kup "bulki" 5
else
    kup "chleb" 1
fi

Tutaj widzimy znane już z pythona słowa kluczowe if i else, ale mamy też dodatkowo słowo kluczowe then i fi. Tak jak wspomniałem wcześniej słowo kluczowe then sygnalizuje po prostu rozpoczęcie bloku instrukcji dla gdy wyrażenie logiczne jest prawdziwe, natomiast słowo kluczowe fi kończy instrukcję warunkową w bashu.
Możecie również zauważyć inne wywołanie funkcji w bashu, niż to miało miejsce w pythonie. Niestety nie zdążyłem Wam tego pokazać w odcinku dotyczącym procedur i funkcji, więc teraz to na szybko nadrabiamy 🙂 Od pythona i większości innych języków różni się tym, że parametry funkcji przekazuje się mówiąc kolokwialnie „po spacji” a nie w nawiasach i rozdzielone przecinkami.

JavaScript

if (sa_swieze("bulki")) {
    kup("bulki", 5);
} else {
    kup("chleb", 1);
}

W JavaScripcie widzimy kolejne drobne różnice zapisu instrukcji warunkowej względem składni pythonowej. Warunek logiczny, czy też wyrażenie logiczne mamy tu otoczone nawiasami okrągłymi a początek i koniec bloku instrukcji otoczony jest nawiasami klamrowymi. Taką formę zapisu spotkacie też i w paru innych językach programowania.

PHP

W PHP jak widzimy składnia jest dla instrukcji warunkowej jest praktycznie identyczna jak w JavaScript’cie. Oczywiście każdy skrypt PHP musi się zaczynać od <?php i kończyć ?>, ale sam zapis w tym przypadku jest identyczny.

<?php
if (sa_swieze("bulki")) {
    kup("bulki", 5);
} else {
    kup("chleb", 1);
}
?>

Java i C/C++

Generalnie w Javie i C/C++ zapis instrukcji warunkowej będzie wyglądał identycznie jak ten z przykładu dla JavaScript. Jak widzicie składnie języków programowania bywają do siebie bardzo zbliżone.

Czym jest i jak działa operator warunkowy?

Omawiając przykłady w kodzie skoncentrowałem się na tak jakby pełnej wersji instrukcji warunkowej, która emuluje, jak zaznaczyłem na wstępnie język naturalny i pozwala z łatwością odczytać kod.
Jednakże w językach, których składnia wywodzi się z języka C (takich jak C, C++, Java, C#, Perl, PHP (od wersji 5.3) i Ruby) mamy do dyspozycji alternatywną formę zapisu instrukcji warunkowej poprzez tzw. operator warunkowy.

Wygląda on tak:

warunek ? wyrażenie_dla_prawdy : wyrażenie_dla_fałszu

Działanie operatora polega na sprawdzeniu wartości logicznej wyrażenia „warunek” i zwrócenie na jej podstawie jednej z wartości: wyrażenie_dla_prawdy, gdy jest warunek jest prawdziwy i wyrażenie_dla_fałszu, gdy jest warunek jest fałszywy. Warto dodać, że wartość wyrażenia, które nie zostało zwrócone zwykle nie jest obliczana.

Podsumowanie

I to wszystko co przygotowałem dla Was w tym odcinku Programowania dla nieprogramistów! Mam nadzieję, że odcinek się Wam spodobał, jeśli tak to proszę zostawcie łapkę w górę, jeśli nie to łapkę w dół, ale koniecznie wtedy napiszcie dlaczego i co mogę zmienić w przyszłości. Dodatkowo tradycyjnie zapraszam na moje pozostałe kanały społecznościowe, gdzie publikuję dodatkowe materiały, które nie zawsze trafiają na YouTube.
Oczywiście zachęcam gorąco do komentowania, postaram się odpowiedzieć na każdy komentarz, jak i też do subskrypcji aby nie przegapić kolejnych filmów z tej i pozostałych serii edukacyjnych na moim kanale.
Do zobaczenia!