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

Содержание статьи

Пример использования if

Рассмотрим следующий пример:

Это простое выражение if. Если условие истинно, то выражение выполнит код между фигурными скобками. Если условие ложно, то выражение не будет выполнять данный код. Все просто!

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

От вас не требуется использовать возвращаемое значение или присваивать его переменной. Подробнее о возврате значения будет рассказано ниже.

Пример использования else

Вы можете расширить выражение if, чтобы указать действия для случая, когда условие ложное. Это называется условием else. К примеру:

Здесь, если константа animal была бы равна "Кошка" или "Собака", тогда выражение выполняет первый блок кода. Если константа animal не равна ни "Кошка", ни "Собака", тогда выражение выполняет блок внутри else от if выражения, выводя на консоль следующее:

Также можно использовать выражение if-else в одну строку. Рассмотрим, как это поможет сделать код более кратким и читабельным.

Если нужно определить минимальное и максимальное значение из двух переменных, можно использовать выражение if следующим образом:

На данный момент вам должно быть понятно, как это работает, но здесь используется довольно много кода. Взглянем, как можно улучшить код через использование выражения if-else, которое возвращает значение.

Просто уберем скобки и поместим все в одну строку следующим образом:

В первом примере мы имеем условие a < b. Если это истинно, то результат, присваиваемый назад в константу min, будет значение из константы a. Если ложно, то результат будет значением из константы b. Значение в константе min будет 5. Во втором примере, max присваивается значение b, которым является 10.

Так намного проще! Это пример идиоматического кода, который означает, что код пишется ожидаемым образом для определенного языка программирования. Идиомы не только улучшают код, но и позволяют другим разработчикам, знакомым с языком, быстро понять чужую программу.

На заметку: Так как поиск большего или меньшего из двух чисел является очень распространенной операцией, стандартная библиотека Kotlin предоставляет для этой цели две функции: max() и min(). Наверняка в прошлых уроках вы уже встречали их.

Применение выражения else-if

Выражения if можно использовать более эффективно. Иногда нужно проверить одно условие, затем другое. Здесь вступает в игру else-if, встраивая другое выражение if в условие else предыдущего условия if.

Вы можете использовать else-if следующим образом:

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

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

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

  • Сначала проверяется, если время меньше 6. Если так, значит, это раннее утро;
  • Если время не меньше 6, тогда выражение продолжается до первого условия else-if, где проверяется, является ли время меньше 12;
  • Когда условие оказывается ложным, выражение проверяет, является ли время меньше 17, затем меньше ли 20, затем меньше ли 24;
  • В конечном итоге, если время за пределами диапазона, выражение возвращает недействительное значение.

В коде выше константа hourOfDay равна 12. Следовательно, код выведет следующее:

Обратите внимание, что хотя оба условия hourOfDay < 20 и hourOfDay < 24 истинны, выражение выполняет и возвращает только первый блок, чье условие истинно. В данном случае это блок с условием hourOfDay < 17.

Условия AND и OR для IF-выражения

Важным аспектом выражений if и булевых операторов является то, что происходит, когда несколько логических условий разделяются путём использования AND (&&) или OR (||).

Рассмотрим следующий код:

Результат:

Первое условие if-выражения, age > 18, ложно. Поэтому все выражение никак не может быть истинным — так как мы используем строгую проверку через AND &&. Поэтому Kotlin даже не потрудится проверить вторую часть выражения, а именно проверку имени.

Теперь давайте заменим && на || OR (или):

Результат:

В этом коде проверка age > 18 вернёт false, но вот проверка по имени name == "Андрей" вернёт true. Так как мы использовали проверку через || (или), то имея хотя бы один true — будет выполнен первый кусок кода из фигурных скобок if-выражения.

Область видимости переменных в IF-выражении

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

Представьте, что вам нужно посчитать оплату, которую вам должен заплатить клиент. Условия сделки заключаются в том, что вы зарабатываете 25 долларов каждый час до 40 часов работы. После этого времени вы получаете по 50 долларов в час.

Используя Kotlin, оплату можно посчитать следующим образом:

Данный код принимает количество часов и проверяет, не превышает ли оно 40. Если да, то код вычисляет количество часов, превышающее 40, и умножает его на 50 долларов, а затем добавляет результат к цене. Затем код вычитает количество часов, превышающих 40, из отработанных часов. Остальные отработанные часы умножаются на 25 долларов и прибавляются к общей стоимости.

Результат примера выглядит следующим образом:

Интересен код внутри выражения if. Здесь объявляется новая константа hoursOver40 для хранения количества часов, превышающих 40. Вы можете использовать ее внутри оператора if.

Поскольку 1 < 2 истинно, все выражение также должно быть истинным. Поэтому еще раз проверка name не выполняется. Это пригодится позже, когда вы начнете работать с более сложными типами данных.

Но что произойдет при попытке использовать его в конце кода свыше?

Будет получена ошибка:

Ошибка сообщает, что вам нельзя использовать константу hoursOver40 вне области видимости, в которой она была создана. Обратите внимание, данная константа была создана в тело if выражения.

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

Каждая область видимости может использовать переменные и константы из родительской области видимости main(). В примере выше в области видимости внутри выражения if используются переменные price и hoursWorked, которые были созданы в родительской области видимости.

Задания для проверки

  1. Создайте константу myAge, значением которой будет ваш возраст. Напишите выражение if для вывода слова Подросток, если вам от 13 до 19 лет, и Не подросток, если это не так;
  2. Создайте константу answer и используйте однострочное выражение if-else, чтобы установить его равным результату, который вы выводили для тех же случаев в приведенном выше упражнении. Затем выведите в консоль результат из константы answer.
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
jurvrn
2 лет назад

опечатка? в коде 1 больше 2
Рассмотрим следующий код:

Так как 1 < 2 истинно, все выражение также будет истинным. Следовательно, еще раз проверка name не выполняется. Это пригодится позже, когда вы начнете работать с более сложными типами данных.

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x