Kurs C# cz.6 – instrukcje warunkowe
UWAGA! Już teraz sprawdź NOWY, JESZCZE LEPSZY kurs C#, którzy przygotowałem. Znajdziesz go po TYM linkiem.
Jeśli chcemy aby nasze programy potrafiły, oprócz wykonywania prostych obliczeń, również samodzielnie decydować co zrobić potrzebny nam będzie jakiś sposób na przekazanie im jakie decyzje powinny podejmować. W tym celu poznamy dzisiaj kolejny bardzo ważny element języka C# jakim są instrukcje warunkowe.
Instrukcje warunkowe, jak już wspomniałem pozwalają nam dodać w naszych programach element decyzyjności, przykładowo chcąc wykonać różne operacje w zależności od tego czy liczba jest mniejsza bądź większa od jakiejś wartości skorzystamy z pomocy właśnie instrukcji warunkowych.
W języku C# mamy zasadniczo 2 typy instrukcji warunkowych: if…else… i switch, chociaż ten pierwszy występuje też w wersji skróconej o czym za chwilę.
Instrukcje warunkowe operują na dwóch wartościach – prawdzie i fałszu. Aby móc uzyskać taką wartość musimy skorzystać pewnie z jakichś operatorów. W rzeczy samej, w języku C# mamy kilka operatorów, które pozwalają uzyskać wartość true/false:
- == – porównanie dwóch wartości. Zwraca wartość true jeśli wartości (obiekty) są takie same, w przeciwnym razie otrzymamy wartość false
- != – przeciwieństwo poprzedniego operatora. Również porównuje dwie wartości (obiekty) jednak w tym wypadku zwraca true kiedy wartości będą różne
- <, >, <=, >= – „mniejsze”, „większe”, „mniejsze lub równe”, „większe lub równe”. Służą do porównywania wartości liczbowych. Myślę, że nie ma co tutaj się rozpisywać, ich nazwy mówią wszystko o sposobie działania.
Dodatkowo chcąc poskładać bardziej skomplikowany warunek możemy skorzystać z operatorów || i && czyli odpowiednio 'lub’ i 'i’. Pierwszy powoduje, że jeśli któryś z warunków jest spełniony czyli, któryś z operatorów daje wartość true to całość da wartość true, w drugim przypadku wszystkie warunki muszą być spełnione.
Przykładowy warunek może wyglądać tak
a > 4 && (b < 10 || b > 15)
W tym wypadku będzie on spełniony kiedy a będzie większe od 4 i b będzie mniejsze od 10 lub b będzie większe od 15.
Więcej o tym całym łączeniu warunków logicznych, ich przekształcaniu itd. możecie znaleźć szukając w Google o algebrze Boola ;)
W języku C# dla wartości logicznych przewidziany jest typ bool dzięki czemu możemy w jednym miejscu obliczyć wyrażenie logiczne i wykorzystać je później albo zwrócić jako wartość funkcji. Tak więc poza takimi bezpośrednimi warunkami możemy np. wywołać funkcję, która zwraca true/false:
a > 4 && isOk()
Podobnie sprawa wyglądać będzie z używaniem zmiennych.
No dobra, ale miało być o instrukcjach warunkowych więc po tym krótkim omówieniu operacji logicznych w C# przejdźmy do głównego tematu tej części.
Jak wspomniałem na początku, w języku C# mamy dwa rodzaje instrukcji warunkowych z czego jedna z nich występuje w dwóch postaciach.
- Instrukcja if-else jest bardzo często wykorzystywana w programach. Jej konstrukcja wygląda następująco:
if (warunek) { //blok1 } else if (warunek2) { //blok2 } else { //blok3 }
Jeśli warunek jest spełniony zostanie wykonany kod z bloku1, a pozostałe dwa bloki będą pominięte. Jeśli zaś pierwszy warunek zwróci false to program sprawdzi warunek2 i w przypadku jego spełnienia (zwrócenia wartości true) wykonany będzie blok2, zaś jeśli żaden warunek nie będzie spełniony wykona się kod z bloku3. Zarówno else if jak i else nie są wymagane, dodatkowo ten pierwszy może być dodany kilkukrotnie jeśli chcemy dodać więcej warunków.
Przykład wykorzystania instrukcji if-else w metodzie:
public int dejMnieCos(int liczba) { if (liczba > 100) { return liczba / 2; } else if (liczba < 50) { return liczba * 2; } else { return liczba + 2; } }
2) Drugi typ instrukcji warunkowej to instrukcja switch. Wygląda ona w następujący sposób:
switch(zmienna) { case wartosc: //blok1 break; case wartosc2: //blok2 break; case wartosc3: //blok3 break; default: //blok4 }
Służy ona do sprawdzania wartości zmiennej. jeśli zmienna podana na początku ma wartość podaną obok słowa case wtedy wykonywany jest odpowiedni blok kodu, a reszta jest pomijana. W przypadku kiedy zmienna nie jest równa żadnej z podanych wasrtości wykonywany jest blok4 wpisany za słowem default. Zwróć uwagę na słowa kluczowe break, które znajdują się po każdym bloku. Oznaczają one pominięcie wykonywania dalszych instrukcji i wyjście ze switch. Wartościami w instrukcji switch mogą być tylko stałe.
3) Wspomniałem, że jedna z instrukcji posiada skróconą wersję. Tą instrukcją jest if-else. Jeśli chcemy wybrać jeden z dwóch wariantów na podstawie warunku możemy to zrobić w taki sposób:
var max = a > b ? a : b;
W podanym przykładzie przypisujemy do zmiennej max wartość zmiennej a lub b w zależności od tego czy a jest większe od b. Tak więc mamy najpierw warunek, następnie znak ?, po którym wpisujemy co zwróci nasza instrukcja jeśli warunek zostanie spełniony i na końcu znak : , po którym wpisujemy wartość zwracaną w przypadku niespełnienia warunku.
Ważne żeby zapamiętać, że ten zapis musi zawsze zwracać jakąś wartość, tak więc nie możemy wykorzystać go w przypadku kiedy chcemy po prostu zdecydować jaką metodę lub blok kodu wykonać, wtedy musimy skorzystać ze zwykłej instrukcji if-else.
To tyle jeśli chodzi o podstawy instrukcji warunkowych. Od tej pory możecie pisać programy, które potrafią podejmować decyzje wg ustalonych przez Was reguł ;)
W części o skróconej wersji IF-Else wpisałeś „a > b ? a ? b”. Nie powinno być „a > b ? a : b”? :)
Masz rację, już poprawiam :)