Условные выражения

Условное выражение (или if-выражение) - это конструкция, которая позволяет программе выполнять различные вычисления в зависимости от значения boolean-выражения. Если это true, то программа выполняет одно действие. Если значение равно false, программа выполняет другое действие. Здесь вы можете увидеть несколько примеров логических выражений: a > b, i - j == 1 и так далее.

Условное выражение имеет несколько форм. Давайте взглянем на них.

Выражение if

Простейшая форма состоит из ключевого слова if, boolean-выражения (условия) и блока, заключённого в фигурные скобки.

if (expression) {
    // сделать что-нибуть
}

Если выражение равно true, выполняется действие с инструкциями внутри блока кода, в противном случае программа пропускает их.

Например, этот код выводит "Очень опытный человек", если значение age больше 100.

val age = ... // Int
if (age > 100) {
    println("Очень опытный человек")
}

// другие строки кода

В этом примере, если age превышает 100, код выводит "Очень опытный человек", в противном случае он ничего не делает. После этого выполняются другие строки кода.

Если условие равно false, действия в блоке выполняться не будут:

if (3 == 4) {
    println("3 равно 4")
}

В приведенном выше коде boolean-выражение 3 == 4 равно false, поэтому блок пропускается.

Иногда вы увидите ситуацию, когда выражение в условии представляет собой единственную переменную Boolean типа. Вместо того, чтобы писать b == true или b == false, используйте эту переменную (или ее отрицание с помощью !) в качестве логического выражения:

val b = ... // Это true или false (Boolean)
if (b) { // или !b
    // сделать что-то
}

Вы можете использовать эту конструкцию в любом месте программы, где ожидается использование условного оператора. Вы даже можете вложить его в другой условный оператор для выполнения многоступенчатых проверок.

Выражение if-else

Выражение, которое мы видели выше, может быть расширено с помощью ключевого слова else и другого блока для выполнения альтернативных действий, когда выражение равно false.

if (expression) {
    // сделать что-то
} else {
    // сделать что-то другое
}

В этом случае, если выражение равно true, то выполняется первый блок кода, в противном случае выполняется второй блок кода. Обратите внимание, что ситуация, когда они оба выполняются, невозможна.

Давайте взглянем на приведенный ниже пример. Программа выводит различный текст в зависимости от значения num (четного или нечетного). Число считается четным, если оно делится на 2, в противном случае оно нечетное.

val num = ... // num инициализированное каким-то значением (Int)

if (num % 2 == 0) {
    println("Это чётное число")
} else {
    println("Это нечётное число")
}

Поскольку число может быть как четным, так и нечетным, будет отображено только одно сообщение. Если num равно 10, программа выводит "Это чётное число". Если значение равно 11, то выводится "Это нечётное число".

Выражение if-else-if

Самая обычная форма условного оператора состоит из нескольких условий и else-ветвей.

if (expression0) {
    // сделать что-то
} else if (expression1) {
    // сделать что-то другое 1
// ...
} else if (expressionN) {
    //  сделать что-то другое N
}

Например, этот код выводит рекомендации о том, какой компьютер вам нужно купить, в зависимости от вашего бюджета.

val dollars = ... // ваш бюджет (Int)

if (dollars < 1000) {
    println("Купи ноутбук")
} else if (dollars < 2000) {
    println("Купи ПК")
} else if (dollars < 100_000) {
    println("Купи сервер")
} else {
    println("Купи дата-центр или квантовый компьютер")
}

Это условное выражение имеет четыре ветви: dollars < 1000, dollars < 2000, dollars < 100_000 и dollars >= 100_000. Если значение в долларах равно 10_000, выводится надпись "Купи сервер".

Вложенные выражения if

Как мы уже говорили ранее, вы можете вложить одно выражение if в другое. Например:

if (n % 2 == 0) {
    if (n % 3 == 0) {
        println("Число делится на 6")
    } else {
        println("Число делится на 2")
    }
} else {
    println("Число не делится на 2")
}

Этот код проверяет, делится ли значение на 2, и, если оно равно true, проверяет, делится ли значение на 3. Если это также true, это означает, что значение делится на 6.

Условие — это выражение

В отличие от других языков (таких как Java, Python, C#), в Kotlin if - это выражение, а не оператор. Как регулярное выражение, оно может возвращать значение (результат) вычислений. Результатом должно быть последнее выражение в теле.

Этот код находит максимальное количество двух целых чисел a и b. Он печатает выбор и сохраняет результат в переменной max.

val max = if (a > b) {
    println("Выбор: a")
    a
} else {
    println("Выбор: b")
    b
}

Если вы собираетесь использовать if в качестве выражения, у него должна быть ветвь else.

!> В выражениях if лучше выдавать результаты одного и того же типа во всех ветвях, потому что в этом случае тип переменной будет строгим. Однако, как правило, это не требуется. Далее вы узнаете, как работать с переменными неизвестного типа.

Если все тела содержат только один оператор, вы можете пропустить фигурные скобки:

val max = if (a > b) a else b

Иногда нам даже НЕ нужно объявлять новую переменную для хранения результата. В этом примере мы сравниваем два числа и печатаем текстовую информацию, передавая ее функции.

fun main() {
    val a = readln().toInt()
    val b = readln().toInt()

    println(if (a == b) {
        "a равно b"
    } else if (a > b) {
        "a больше, чем b"
    } else {
        "a меньше, чем b"
    })
}

Идиомы

Пришло время для следующей идиомы! Теперь мы обращаем ваше внимание на if выражения. Вы должны предпочесть использовать эту форму, когда вам нужно получить какие-то результаты. Конечно, вы можете работать с if как с оператором, но использование if в качестве выражения — лучший выбор. Например:

val max = if (a > b) a else b // в одну строку

// ...

var max = a // пытайтесь избегать использование var, если возможно
if (b > a) max = b

Второй вариант может вызвать некоторые проблемы, например, вы можете случайно изменить значение переменной max или забыть его изменить. Поэтому мы рекомендуем вам использовать if как выражения, в этих случаях.

Заключение

Подводя итог, давайте еще раз скажем, что выражение if имеет ряд форм, таких как if, if-else и if-else-if. Вы можете вложить условие в тело другого условия. Kotlin также предоставляет возможность возвращать значение в качестве результата. Теперь мы закончили с условиями.

Last updated