W kolejnej części o języku Kotlin dowiecie się jak wygląda instrukcja warunkowa w języku Kotlin, a także czym się charakteryzuje tak zwane "wyrażenie warunkowe", wygodny "skrótowiec" do przypisywania wartości kiedy warunek jest lub nie jest spełniony. Zapraszam serdecznie!

INSTRUKCJA WARUNKOWA W JĘZYKU KOTLIN. RÓŻNICE WZGLĘDEM JAVY

Wygląd "if’a" wcale nie uległ zmianie jeśli przesiadacie się z języka Java. Oto najprostsza postać:

if(warunek)
{

}

"Klasyka gatunku" by się powiedziało. Słowo kluczowe "if", warunek w postaci wyrażenia logicznego z użyciem wszelakiej maści operatorów (więcej informacji niżej), nawiasy klamrowe i tyle. Prosta instrukcja warunkowa z możliwością pominięcia nawiasów klamrowych, jeśli ma być wykonywana pojedyncza instrukcja.

W sytuacji, kiedy interesuje Was zaprogramowanie dwóch ścieżek programu, czyli przypadku kiedy warunek nie zostanie spełniony, sięgacie po to samo słówko "else":

if(warunek)
{

}
else
{

}

Widzicie? Instrukcja warunkowa w języku Kotlin nie różni się niczym w stosunku do Javy. Nawet wariant "else if" jest identyczny patrząc na "starszego brata". Tylko spójrzcie:

if(warunekA)
{

}
else if(warunekB)
{

}
else
{

}

"Javovcy" będą się czuli jak rybka w wodzie.

KOLEJNOŚĆ WYKONYWANIA

Korzystając ze słów kluczowych "else" i "else if", musicie pamiętać o zasadzie pierwszeństwa. Gdy warunek zostanie spełniony (wyrażenie zwróci "true"), wykonywana jest pierwsza "gałąź" instrukcji, zaraz po "if". Jeżeli warunek nie zostanie spełniony, program "patrzy" czy zostały zdefiniowane jakieś inne warunki do sprawdzenia ("else if"). Potem przechodzi do następnego i sprawdza ten, na którym się zatrzymał. Natomiast, gdy natrafi na samo słówko "else", instrukcje zawsze zostaną wykonane jeżeli poprzedni warunek zwrócił "fałsz". Reasumując:

  • program wykona pierwszą "gałąź" instrukcji <=> warunek po słowie "if" został spełniony
  • program wykona N-tą "gałąź" instrukcji <=> N-ty warunek po słowach "else if" został spełniony ORAZ żaden warunek po słowie "if" / "else if" nie został spełniony
  • program ZAWSZE wykona "gałąź" instrukcji po słowie "else" <=> ŻADEN warunek po słowach "if" oraz "else if" nie został spełniony

JAK "WYGLĄDA" WARUNEK?

Wiecie już jak wygląda instrukcja warunkowa w języku Kotlin. Jednak aby ten materiał nie wyglądał "sucho", przyjrzymy się jak wygląda definicja takiego warunku. Jak wspomniałem, warunkiem jest wyrażenie zwracające wartość logiczną (czyli "true" lub "false"). Przy użyciu szeregu operatorów, jesteśmy w stanie budować różne wyrażenia, które mają definiować serie instrukcji i zachowań wedle naszych intencji i założeń projektowych.

Najprostszymi wyrażeniami są słowa "true" i "false":

if(true)
{

}

Jednak z racji tego, że są to stałe, ich bezpośrednie osadzanie do warunków nie ma sensu. Sprawdzając warunek, musi on podlegać szansie na zmianę decyzji podczas działania programu. Dlatego wykorzystuje się do tego zmienne w parze z operatorami relacyjnymi, logicznymi i innymi.

  • Czy zmienna "X" jest większa od 3?
  • Czy podane słowo to "kaczka"?
  • Czy obiekt samochodu jest koloru czerwonego?

To są przykładowe warunki, w których główną rolę obejmują zmienne, aby w trakcie działania aplikacji można było doświadczyć spełnienia ORAZ niespełnienia warunku. Poznajcie teraz serię operatorów.

LISTA OPERATORÓW

"Znaczki" służące do budowy warunków nazywane są operatorami. Występuje kilka kategorii operatorów jednak nie tutaj nie będzie żadnej segregacji. Część będzie znana użytkownikom języka Java, aczkolwiek część została albo wprowadzona, albo zamieniona na inny symbol / słowo kluczowe. Najlepiej będzie jak rzucicie na to okiem w formie tabelki:

Znak (Kotlin)
Znak (Java) Znaczenie Przykład
== strukturalnie równe 4 == 4
=== brak referencyjnie równe x === y
!= strukturalnie różne od
5 != 2
!== brak referencyjnie różne od x !== y
! negacja !(5 != 2)
< mniejsze od
6 < 10
<= mniejsze bądź równe od 6 <= 6
> większe od
7 > 1
>= większe bądź równe od 7 >= 3
&& koniunkcja 4 == 4 && 6 < 10
|| alternatywa 4 != 4 || 6 < 10
xor ^ alternatywa wykluczająca 5 xor 2
and & koniunkcja binarna 5 and 2
or | alternatywa binarna 5 or 2
shl << przesunięcie bitowe w lewo 5 shl 2
shr >> przesunięcie bitowe w prawo 5 shr 2
ushr >>> przesunięcie bitowe w prawo bez znaku 5 ushr 2
in brak istnienie elementu w danej kolekcji 5 in numbers

Instrukcja warunkowa w języku Kotlin może posługiwać się wyżej wymienionymi operatorami. Na początek wyjaśnijmy sobie te podstawowe, które znajdują się w obu językach.

OPERATORY RELACYJNE

Operatory relacyjne służą do badania relacji pomiędzy operandami (argument operatora). Wśród nich wyróżnia się:

  • równe
  • różne od
  • mniejsze od
  • mniejsze bądź równe od
  • większe od
  • większe bądź równe od
OPERATORY LOGICZNE

Operatory logiczne pozwalają tworzyć bardziej złożone warunki składające się z kilku podwarunków. Oto klasyczne operatory:

  • koniunkcja (wszystkie warunki muszą być spełnione)
  • alternatywa (przynajmniej jeden z warunków musi być spełniony)
  • alternatywa wykluczająca (tylko jeden z warunków musi NIE BYĆ spełniony)
    • Jeśli instrukcja warunkowa w języku Kotlin ma korzystać z alternatywy wykluczającej, to zamiast znaczka (^), korzystamy ze słowa "xor" od "exclusive or".
OPERATORY BITOWE

Operatory bitowe to pozostałość jeszcze z języka C kiedy to w czasach, gdy nie było jeszcze tak wydajnych procesorów, wykonywało się dzięki temu szybsze mnożenie i dzielenie przez potęgę liczby dwa, ze względu na naturę liczb binarnych.

  • koniunkcja binarna
  • alternatywa binarna
  • przesunięcie bitowe w lewo (mnożenie liczby przez potęgę liczby 2)
  • przesunięcie bitowe w prawo (dzielenie liczby przez potęgę liczby 2; jeśli następuje dzielenie liczby nieparzystej, ułamek jest "obcinany")
  • przesunięcie bitowe w prawo bez znaku (jak wyżej, tylko przesunięcie powoduje "wyzerowywanie" bitów od lewej strony przez co wynik staje się dodatni)
Instrukcja warunkowa w języku Kotlin

Instrukcja warunkowa w języku Kotlin posiada taką samą składnię i sposób zapisu jak Java.

A teraz parę zdań komentarza na temat tych "premierowych".

OPERATORY DO SPRAWDZANIA TOŻSAMOŚCI ("===" I "!==")

Kotlin posiada dodatkowe operatory do sprawdzania "równości" obiektów. Symbole "===" oraz "!==" pozwalają szybko zweryfikować czy dwie zmienne wskazują na ten sam obiekt (posiadają identyczną referencję). Zatem jeśli zapiszemy następujący kod:

val x = 4
val y = x

a poniżej dorzucimy "println" z odpowiednim sprawdzeniem:

println(x === y)

ujrzymy "true", bo przypisaliśmy ten sam obiekt do zmiennej "y". Nie wartość, obiekt!

WYSTĘPOWANIE ELEMENTU W KOLEKCJI / TABLICY

Co powiecie na słowo kluczowe "in", które pozwala szybko i przyjemnie weryfikować czy element przechowywany w zmiennej zawiera się w podanej kolekcji lub tablicy? Unikamy konieczności przelatywania przez pętlę celem sprawdzenia czy podany element zawiera się w pewnym zbiorze danych. Dysponując hipotetyczną tablicą z liczbami całkowitymi "numbers", możemy w Kotlinie sprawdzić bardzo szybko czy dowolna liczba:

println(60 in numbers)

zawiera się w tablicy. Wynik "println" od razu nam "powie" czy znajduje się w tablicy, czy nie.

Sprawdzenie czy element zawiera się w tablicy za pomocą słowa kluczowego "in" w języku Kotlin

Słowo kluczowe "in" to jeden z nowych operatorów w języku Kotlin do sprawdzania czy dany element zawiera się w kolekcji, tablicy lub innego zbioru danych.

WYRAŻENIE WARUNKOWE. NOWOŚĆ W JĘZYKU KOTLIN!

Zaskoczeni, że instrukcja warunkowa w języku Kotlin na tym się nie kończy? Na zakończenie zaprezentuję Wam wygodniejszą formę operatora trójargumentowego, jak nazwaliby to "Javowcy". Jest nim "wyrażenie warunkowe". Załóżmy, że dysponując dwiema liczbami całkowitymi:

val x = 3
val y = 5

chcemy wypisać na wyjściu czy zmienna "x" jest większa od "y" (albo odwrotnie). Początkujący mogliby to napisać tak:

if(x > y)
{
	System.out.println("X jest większe od Y.");
}
else
{
	System.out.println("Y jest większe bądź równe X.");
}

Ciut bardziej doświadczeni programiści Javy skorzystaliby z operatora trójargumentowego i wyglądałoby to następująco:

String text = (x > y) ? "X jest większe od Y." : "Y jest większe bądź równe X.";

System.out.println(text);

Pięknie! W języku Kotlin wygląda to bardzo podobnie tylko korzystamy z tych samych słówek. Spójrzcie na to!

val text = if(x > y) "X jest większe od Y." else "Y jest większe bądź równe X."
	
println(text)

A dzięki "osadzaniu" wyrażeń wewnątrz funkcji na styl języka C, ostateczny kod wyglądałby tak:

println(if(x > y) "X jest większe od Y." else "Y jest większe bądź równe X.")

Tym sposobem twórcy pokazali kolejny dowód, że język Kotlin ma zapewniać maksimum zwięzłości.

Wyrażenie warunkowe w języku Kotlin

Instrukcja warunkowa w języku Kotlin występuje także w formie wyrażenia warunkowego jako "zastępstwo" tradycyjnego zapisu operatora trójargumentowego.


Dziękuję jeśli ktoś z Was zdołał wszystko przeczytać bez pomijania ani jednego zdania. Artykuł wyszedł mi znacznie dłuższy niż zwykle jednak sądząc po jego obszerności, to nie zapomniałem o niczym.

PODOBNE ARTYKUŁY