Условия (if/else/switch) в Kotlin 1.9: подробное руководство
Условные конструкции: if, else, when
Что такое условия и зачем они нужны?
Представь, что ты играешь в компьютерную игру. Если персонаж подбирает красное зелье — у него восстанавливается здоровье. Если синее — мана. А если жёлтое — он получает ускорение. Программа должна принимать решения в зависимости от ситуации. Именно для этого нужны условные конструкции.
В жизни мы постоянно делаем выбор: «Если на улице дождь, я возьму зонт. Иначе пойду без зонта». В программировании работает тот же принцип: мы задаём условие, и компьютер выполняет разные действия в зависимости от того, верно оно или нет.
Основной синтаксис: if и else
Самая простая конструкция выглядит так:
if (условие) {
// код, который выполнится, если условие истинно
}
Условие — это выражение, которое может быть либо true (правда), либо false (ложь).
Пример 1: Проверка возраста для входа на аттракцион
fun main() {
println("Сколько тебе лет?")
val age = readln().toInt()
if (age >= 14) {
println("Проходи! Тебе можно на этот аттракцион.")
}
}
Что здесь происходит? Мы считываем возраст. Если условие age >= 14 истинно (возраст 14 или больше), программа выведет сообщение. Если нет — ничего не произойдёт.
А что, если нужно сделать что-то и в обратном случае? Для этого есть else:
if (условие) {
// если true
} else {
// если false
}
Пример 2: Определяем, какое число больше
fun main() {
println("Введи первое число:")
val a = readln().toInt()
println("Введи второе число:")
val b = readln().toInt()
if (a > b) {
println("Первое число ($a) больше второго ($b)")
} else {
println("Первое число ($a) не больше второго ($b)")
}
}
Обрати внимание: если числа равны, программа скажет, что первое не больше второго. Но это не совсем точно, правда? Для таких случаев пригодится цепочка условий.
Цепочка условий: if, else if, else
Когда вариантов больше двух, используют else if:
if (условие1) {
// выполнится, если условие1 истинно
} else if (условие2) {
// выполнится, если условие1 ложно, а условие2 истинно
} else {
// выполнится, если все условия ложны
}
Пример 3: Правильное сравнение двух чисел
fun main() {
println("Введи первое число:")
val a = readln().toInt()
println("Введи второе число:")
val b = readln().toInt()
if (a > b) {
println("$a больше $b")
} else if (a < b) {
println("$a меньше $b")
} else {
println("$a равно $b")
}
}
Теперь программа корректно обрабатывает все три случая!
Проверка чётности числа
Вернёмся к задаче Лизы с ракушками. Как понять, чётное число или нет? В Kotlin для этого есть оператор % (остаток от деления). Если число делится на 2 без остатка — оно чётное.
fun main() {
println("Сколько ракушек ты нашла?")
val shells = readln().toInt()
if (shells % 2 == 0) {
println("$shells — чётное число! Можно разложить парами.")
} else {
println("$shells — нечётное число. Одна ракушка останется без пары.")
}
}
Множественный выбор: when (switch в Kotlin)
Когда нужно проверить одну переменную на множество значений, вместо длинной цепочки if удобнее использовать when. Это как переключатель: программа смотрит на значение и выбирает подходящий вариант.
when (переменная) {
значение1 -> { /* действия */ }
значение2 -> { /* действия */ }
else -> { /* если ничего не подошло */ }
}
Пример 4: Возрастные зоны в парке аттракционов
fun main() {
println("Сколько лет посетителю?")
val age = readln().toInt()
when (age) {
in 0..3 -> println("Зона для малышей: карусельки и батут")
in 4..7 -> println("Детская зона: горки и качели")
in 8..12 -> println("Зона для школьников: американские горки")
in 13..17 -> println("Подростковая зона: экстремальные аттракционы")
in 18..100 -> println("Взрослая зона: всё включено!")
else -> println("Возраст не определён. Обратитесь к администратору.")
}
}
Обрати внимание на in 0..3 — это диапазон от 0 до 3 включительно. when сам проверит, попадает ли возраст в этот диапазон.
when можно использовать и с произвольными условиями, как if:
fun main() {
println("Сколько у тебя баллов?")
val score = readln().toInt()
when {
score >= 90 -> println("Отлично! Ты молодец!")
score >= 70 -> println("Хорошо! Можно лучше.")
score >= 50 -> println("Неплохо, но стоит подтянуть знания.")
else -> println("Нужно больше заниматься.")
}
}
Частые ошибки новичков
- Забывают фигурные скобки. В Kotlin, если в блоке только одна команда, скобки можно опустить. Но новичкам лучше всегда их ставить — так код понятнее и меньше шансов ошибиться.
- Путают = и ==.
=— это присваивание (положить значение в переменную).==— это сравнение (проверить, равны ли значения). Ошибка:if (a = 5)вместоif (a == 5). - Забывают про else. Иногда программа должна сделать что-то в любом случае. Если не написать
else, при ложном условии ничего не произойдёт, и пользователь может не понять, почему. - Сложные условия без скобок. Если условие состоит из нескольких частей (например,
if (a > 0 && a < 10)), всегда используй скобки для ясности. - Не учитывают все варианты в when. Всегда добавляй
elseв концеwhen, даже если кажется, что он никогда не понадобится. Программа будет работать надёжнее.
Итоговый пример: Магазин сладостей
Давай решим задачу про скидки в магазине. Правила: если сумма покупки больше 1000 рублей — скидка 10%, если больше 5000 — скидка 20%, иначе скидки нет.
fun main() {
println("Добро пожаловать в магазин сладостей!")
println("Введите сумму вашей покупки в рублях:")
val amount = readln().toDouble()
var discount = 0.0 // переменная для скидки
when {
amount > 5000 -> {
discount = 20.0
println("У вас скидка 20%!")
}
amount > 1000 -> {
discount = 10.0
println("У вас скидка 10%!")
}
else -> {
println("Скидка не предоставляется.")
}
}
if (discount > 0) {
val finalAmount = amount * (1 - discount / 100)
println("Итоговая сумма со скидкой: ${"%.2f".format(finalAmount)} рублей")
} else {
println("Итоговая сумма: ${"%.2f".format(amount)} рублей")
}
}
Что тут происходит? Сначала мы определяем размер скидки с помощью when. Затем, если скидка есть, вычисляем итоговую сумму. Обрати внимание на ${"%.2f".format(...)} — это форматирование числа до двух знаков после запятой, чтобы сумма выглядела красиво.
Условные конструкции — это основа любого программирования. Научившись ими пользоваться, ты сможешь писать программы, которые реагируют на разные ситуации, как настоящий живой организм!