На этом шаге мы приведем общие сведения об этом операторе и приведем пример его использования.
Приступим. Откройте IntelliJ и создайте новый проект. (Если у вас IntelliJ уже открыта, создайте новый проект так: File | New | Project...) Выберите Kotlin/JVM и назовите ваш проект NyetHack.
Рис.1. Создание проекта NyetHack
Распахните список NyetHack в инструментальном окне проекта и правой кнопкой мыши щелкните на src, чтобы создать новый Kotlin File/Class. Назовите ваш файл Game. В Game.kt дбавьте точку входа в программу, функцию main, набрав "main" и нажав клавишу Tab. Ваша функция должна выглядеть так (рисунок 2):
fun main() { }
Рис.2. Создание функции main()
В NyetHack состояние игрока зависит от оставшихся очков здоровья в диапазоне от 0 до 100. По ходу игры игрок может получить увечья в боях. С другой стороны, игрок может быть полностью здоров. Вы должны определить правила отображения текущего состояния здоровья игрока: если (if) здоровье игрока равно 100, он должен отображаться полностью здоровым, а иначе (else) вы должны показать, насколько он ранен. Решить эту задачу можно с помощью оператора if/else (если/иначе).
Внутри функции main() напишите первый оператор if/else, как показано ниже. В этом коде много чего происходит, и мы разберем его после того, как он будет написан.
fun main() { val name = "Madrigal" var healthPoints = 100 if (healthPoints == 100) { println(name + " is in excellent condition!") } else { println(name + " is in awful condition!") } }
Рис.3. Вывод состояния здоровья игрока (Game.kt)
Разберем новый код построчно. Сначала объявите значение val с именем name и присвойте ему строковое значение с именем вашего отважного игрока. Далее объявите переменную var с именем healthPoints и присвойте ей начальное значение 100, то есть идеальное состояние. Затем добавьте оператор if/else.
В операторе if/else вы как бы задаете себе вопрос, на который можно ответить "да" или "нет" (true/false): "Есть ли у игрока 100 очков в healthPoints?". Этот вопрос можно выразить с помощью оператора сравнения ==. Он читается как "равно", то есть ваше условие будет звучать так: "Если healthPoints равно 100".
За оператором if следуют фигурные скобки ({}). Код внутри фигурных скобок - это то, чего вы хотите от программы, если оператор if выяснит, что условие истинно. В данном случае это произойдет, если healhPoints будет иметь значение, равное 100.
if (healthPoints == 100) { println(name + " is in excellent condition!") }
Инструкция в фигурных скобках - уже знакомая функция println(), которую мы использовали, чтобы вывести что-нибудь в консоль. В скобках указано, что именно нужно выводить: выражение состоит из значения name и строки " is in excellent condition!" ("в отличном состоянии"). (Обратите внимание на пробел перед строкой - без него будет выведено: "Madrigalis in excellent condition!".) Проще говоря, если оператор if/else обнаружит, что у игрока 100 очков здоровья, программа напечатает, что здоровье у нашего героя в отличном состоянии ("герой в отличном состоянии").
Используя оператор сложения (+), чтобы добавить к значению переменной строку, мы выполняем операцию конкатенации строк. Это простой способ изменить то, что выводится в консоль, в зависимости от значения переменной. Далее вы увидите другой, более предпочтительный способ вставки значений в строки.
А если healtPoints имеет значение, отличное от 100? В этом случае оператор if определит, что условие ложно, он пропустит выражение в фигурных скобках после if и перейдет к оператору else. Интерпретируйте else как "иначе": если условие if истинно, выполнится одно, иначе выполнится другое. В отличие от if, оператор else не нуждается в условии. Он просто выполнится, если if не выполнится, поэтому сразу за ключевым словом следуют фигурные скобки:
} else { println(name + " is in awful condition!") }
Единственная разница в вызове функции printin() - это строка после имени героя. Вместо того чтобы сообщить, что герой в "отличном состоянии!" (is in excellent condition!), мы должны сообщить, что герой в "плохом состоянии" (is in awful condition!).
Код как бы говорит компилятору: "Если (if) у героя ровно 100 очков здоровья, выведи в консоль: "Madrigal is in excellent condition!". Если у героя не 100 очков здоровья, то выведи в консоль: "Madrigal is in awful condition!"".
Оператор структурного равенства == - это один из нескольких операторов сравнения Kotlin. В таблице 1 перечислены операторы сравнения языка Kotlin. Сейчас вам необязательно знать все операторы, так как вы все равно познакомитесь с ними позже. Вернитесь к этой таблице, когда будете решать, каким оператором лучше выразить условие.
Оператор | Описание |
---|---|
< | Оценивает, является ли значение слева меньше значения справа |
<= | Оценивает, является ли значение слева меньшим или равным значению справа |
> | Оценивает, является ли значение слева больше значения справа |
>= | Оценивает, является ли значение слева большим или равным значению справа |
== | Оценивает, является ли значение слева равным значению справа |
!= | Оценивает, является ли значение слева не равным значению справа |
=== | Оценивает, ссылаются ли две ссылки на один объект |
!== | Оценивает, не ссылаются ли две ссылки на один объект |
Вернемся к делу. Запустите Game.kt, нажав Run слева от функции main. Вы увидите следующий вывод:
Madrigal is in excellent condition!
Рис.4. Вывод результата
Так как заданное состояние
healthPoints == 100
Теперь попробуйте изменить значение healtPoints на 89.
fun main() { val name = "Madrigal" var healthPoints = 89 if (healthPoints == 100) { println(name + " is in excellent condition!") } else { println(name + " is in awful condition!") } }
Рис.5. Изменение healtPoints (Game.kt)
Запустите программу снова, и вы увидите:
Madrigal is in awful condition!
Рис.6. Результат изменения healtPoints (Game.kt)
Теперь заданное условие ложно, так как 89 не равно 100, и программа выполнила ветвь else.
На следующем шаге мы рассмотрим добавление условий.