Operator warunkowy jest krótszą i bardziej elegancką metodą na zapisanie instrukcji warunkowej IF, poprzez użycie znaku ? ,który przyjmuje formę:
1 |
Wy1 ? Wy2 : Wy3 ; |
Działa on w następujący sposób: Wy1 jest warunkiem. Jeśli warunek jest spełniony, instrukcja Wy2 jest realizowana, jeśli nie realizowana jest instrukcja Wy3:
|
|
Podwójny znak ?? nazywany jest operatorem koalescencji zerowej. Zwraca lewy operand, jeśli nie jest null (pusty, niezadeklarowany). W przeciwnym wypadku zwraca prawy operand.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Console.WriteLine( "Wejście powyżej osiemnastego roku życia, ile masz lat?"); int? pobierzwiek = null; if (Int32.TryParse(Console.ReadLine(), out int liczba)) { pobierzwiek = liczba; } int wiek = pobierzwiek ?? -1; string odpowiedz; odpowiedz = (wiek == -1) ? "Wprowadzono nieprawidłowy ciąg." : (wiek <= 18) ? "Jesteś za młody!" : "Wejdź proszę."; Console.WriteLine(odpowiedz); |
Kod powyżej sprawdzi wpisany tekst, jeśli tekst jest liczbą, przypisze ją do zmiennej „pobierzwynik” jeśli, nie pozostawi tą zmienną null. Element „int wiek = pobierzwiek ?? -1;” oznacza, że jeśli „pobierzwynik=null” wtedy „wiek=-1” w innym wypadku będzie to liczba. Taki zapis oszczędza nam dużo miejsca i jest krótszy i bardziej czytelny.
Kolejnym elementem, już używanym we wcześniejszych artykułach, ale słabo omówionym jest „breake”, z wcześniejszych lekcji, wiecie, że formuła ta przerywa działanie pętli, instrukcji i wykonywanie kodu. Dodatkowym elementem działającym podobnie do „break” jest „continue” którego działanie w zasadzie jest bardzo podobne, mimo iż nazwa elementu z angielskiego to „kontynuuj” może być trochę myląca, formuła ta przerywa działanie kodu, lecz na trochę inne zasadzie niż „break”. Pomija elementy, ale nie przerywa działania pętli.
|
|
Krótko mówiąc „continue” służy do pomijania elementów a „break” do zatrzymywania działanie kodu.
Skupimy się teraz na pogłębieniu wiedzy na temat pętli i instrukcji warunkowych. Znamy już operatory arytmetyczne i logiczne, których łączenie wewnątrz warunków jest bardzo ważne i skraca ilość wpisywanych pętli i instrukcji:
|
|
Warunki połączyliśmy operatorem „&&”, takich warunków możemy dodać, ile tylko chcemy, oszczędzając miejsce:
1 2 3 4 5 6 7 8 9 10 |
for (int a = 0; a <= 10; a++) { if(a>=3 && a <= 6 && a!=5) Console.WriteLine(a); } } /* wyświetli: 3 4 6 */ |
Takie połączenie elementów jak poniżej przerwie działanie pętli „for” na liczbie 5 dlatego liczba 6 nie będzie wyświetlona:
1 2 3 4 5 6 7 8 9 |
for (int a = 0; a <= 10 && a != 5; a++) { if(a>=3 && a <= 6 ) Console.WriteLine(a); } } /* wyświetli: 3 4 */ |
Użycie różnego rodzaju połączonych warunków prezentuje kod poniżej:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
// zaprzeczenie bool rezultat = true; if (!rezultat) { Console.WriteLine("Warunek jest prawdziwy (rezultat == false)."); } else { Console.WriteLine("Warunek jest fałszywy (rezultat == true)."); } // połączenie dwóch warunków int m = 9; int n = 7; int p = 5; if (m >= n && m >= p) { Console.WriteLine("Nic nie jest większe od m."); } // połączenie dwóch warunków i zaprzeczenia if (m >= n && !(p > m)) { Console.WriteLine("Nic nie jest większe od m."); } //warunki połączone formułą LUB if (m > n || m > p) { Console.WriteLine("m nie jest najmniejsze."); } // LUB i zaprzeczenie m = 4; if (!(m >= n || m >= p)) { Console.WriteLine("Teraz m jest najmniejsze."); } // Wyświetli: // Warunek jest fałszywy (rezultat == true). // Nic nie jest większe od m. // Nic nie jest większe od m. // m nie jest najmniejsze. // Teraz m jest najmniejsze. |
Podczas łączenia warunków, najbardziej przydatnymi elementami są „|| – LUB -OR”, „&& – i -AND” które w swoich programach będziemy wykorzystywać bardzo często. Przykład połączenia tych dwóch operatorów:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
for (int a = 0; a <= 10; a++) { if((a > 0 && a <= 3 ) || (a > 6 && a <= 9)) Console.WriteLine(a); } } /* wyświetli: 1 2 3 7 8 9 */ |
Kod wyświetli liczby, wtedy gdy „a” będzie należało do przedziału: