Перейти до вмісту

Освоюємо 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")
        }
    }
}