Шаг 45.
Основы Kotlin.
Функции. Задания для самостоятельного решения
На этом шаге мы приведем несколько практических заданий с возможными решениями.
Здесь мы предлагаем вам выполнить несколько заданий, направленных на закрепление изученного материала.
Задание 1: функции с единственным выражением
Ранее мы рассматривали синтаксис функции с единственным выражением как способ более компактной записи функций. Можете ли вы переписать auraColor(), использовав синтаксис функции с единственным выражением?
Напомним текст функции auraColor():
private fun auraColor(isBlessed: Boolean, healthPoints: Int,
isImmortal: Boolean): String {
val auraVisible = isBlessed && healthPoints > 50 || isImmortal
val auraColor = if (auraVisible) "GREEN" else "NONE"
return auraColor
}
Раскрыть/скрыть решение и комментарии.
Решение достаточно тривиальное. Как видно из текста этой функции, здесь имеется одно условие, в зависимости от истинности или ложности которого возвращается нужное значение:
private fun auraColor(isBlessed: Boolean, healthPoints: Int, isImmortal: Boolean) =
if (isBlessed && healthPoints > 50 || isImmortal) "GREEN" else "NONE"
}
Рис.1. Функция auraColor()
Задание 2: дурманящий эффект fireball
Заклинание, создающее бокал с дурманящим напитком, не только выводит сообщение в консоль. Заставьте функцию castFireball() возвращать значение результата одурманивания, зависящего
от количества наколдованных бокалов. Уровень одурманивания должен изменяться в пределах значений от 1 до 50, где 50 - максимальное значение, доступное в игре.
Раскрыть/скрыть решение и комментарии.
На наш взгляд, это задание не полное. Не совсем понятно, как высчитывать результат одурманивания,зависящий от количества бокалов. Поэтому мы решили поступить так: результат одурманивания
- это есть количество бокалов, умноженное на 3. Важно следить за тем, чтобы вычисленное значение на было больше 50.
Один из вариантов такой функции приведен ниже (intoxicatingLevel - уровень одурманивания):
private fun castFireball(numFireballs: Int = 2): Int {
println("A glass of Fireball springs into existence.(x$numFireballs)")
var intoxicatingLevel = numFireballs * 3
if (intoxicatingLevel > 50) {
intoxicatingLevel = 50
}
return intoxicatingLevel
}
Рис.2. Вычисление уровня одурманивания
Задание 3: состояние одурманивания
В качестве последнего задания отобразите состояние игрока (intoxicatedState) в зависимости от уровня одурманивания, возвращаемого castFireball(), согласно следующим правилам:
Таблица 1. Состояние игрока
Уровень |
Состояние |
1-10 |
Tipsy (навеселе) |
11-20 |
Sloshed (выпивший) |
21-30 |
Soused (пьяный) |
31-40 |
Stewed (сильно пьяный) |
41-50 |
..t0aSt3d (в стельку) |
Раскрыть/скрыть решение и комментарии.
Дополним предыдущаю функцию, не забыв поменять тип возвращаемого значения:
private fun castFireball(numFireballs: Int = 2): String {
println("A glass of Fireball springs into existence.(x$numFireballs)")
var intoxicatingLevel = numFireballs * 3
if (intoxicatingLevel > 50) {
intoxicatingLevel = 50
}
val intoxicatedState = when (intoxicatingLevel) {
in 1..10 -> "Tipsy"
in 11..20 -> "Sloshed"
in 21..30 -> "Soused"
in 31..40 -> "Stewed"
else -> "..t0aSt3d"
}
return intoxicatedState
}
Рис.3. Функция, возвращающая состояние игрока
Со следующего шага мы начнем рассматривать анонимные функции и функциональные типы.
Предыдущий шаг
Содержание
Следующий шаг