Освоюємо Kotlin/Умовні конструкції
В Kotlin для задання умови подальшого виконання коду використовуються конструкції if/if-else та when
Конструкція if
[ред.]Конструкція if пишеться так:
var x=5;
if (x==5) { //якщо x дорівнює 5
println ("співпало") //виводимо слово "співпало"
}
Якщо після умови йде лише одна інструкція, то фігурні дужки можна опустити.
Зверніть увагу, що перевірка умови на рівність іде з подвійним дорівнює, тобто з оператором ==, а не одним. Одне дорівнює означає присвоєння.
Також можна додавати інструкцію else і створювати складні перевірки умови:
if (x>0) {
println ("додатнє число")
} else if (x<0) {
println ("від'ємне число")
} else println ("ні додатнє, ні від'ємне (0)")
В Kotlin if можна використовувати для повернення значення.
println (if (x>0) "додатнє число"
else if (x<0) "від'ємне число"
else "ні додатнє, ні від'ємне (0)")
в даному випадку кожна секція конструкції if повертає текстовий рядок, який виводиться інструкцією println.
Конструкція when
[ред.]Конструкція when виконує функцію конструкції switch в інших мовах.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> print("x ні 1 ні 2")
}
Тут x перевіряється на кілька значень і when вжито як інструкцію(англ. expression). Можна використати цю конструкцію і як вираз (англ. statement):
var x=2
val text = when (x) {
1 -> "x == 1"
2 -> "x == 2"
else -> "x ні 1 ні 2"
}
print(text)
При використанні when як інструкції всі можливі випадки x можна не покривати і можна опустити else. Але якщо використовувати when як вираз, то треба покрити всі можливі значення. Інакше компілятор викине помилку.
Можна не використовувати суб'єкта when:
var a=2
var b=3
val message = when {
a > b -> "a is greater than b"
a < b -> "a is less than b"
else -> "a is equal to b"
}
print(message)
Можна в одному рядочку перевіряти умову на кілька значень:
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("інший випадок")
}
Також можна використовувати вирази в гілці умови:
when (x) {
s.toInt() -> print("s encodes x")
else -> print("s does not encode x")
}
Можна перевіряти на входження в ряд значень:
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
Можна перевіряти на приналежність до певного типу:
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
Можна також перевіряти на true/false значення, перевіряти на приналежність до певного об'єкту. Детальніше: Конструкція when (англ)
Якщо обробка певного випадку потребує більше ніж один рядок, то потрібно використовувати фігурні дужки:
var a:Int=5
when(a){
1-> println ("1")
5-> {print("a equal ")
println("5")
}
}
}