Условные выражения
Условное выражение (или 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