3. Узнайте больше о функциях
В этом задании вы узнаете больше о функциях в Kotlin, а также о весьма полезном whenусловном выражении.
Шаг 1: Создайте несколько функций.
На этом этапе вы объединяете полученные знания и создаете функции разных типов. Вы можете заменить содержимое файла Hello.kt этим новым кодом.
- Напишите функцию,
feedTheFish()которая вызываетсяrandomDay()для получения случайного дня недели. Используйте строковый шаблон для вывода названияfoodдня недели, который будут есть рыбы. Пока что рыбы едят одну и ту же пищу каждый день.
fun feedTheFish() {
val day = randomDay()
val food = "pellets"
println ("Today is $day and the fish eat $food")
}
fun main(args: Array<String>) {
feedTheFish()
}
- Добавьте
randomDay()в файл Hello.kt функцию , которая выбирает случайный день из массива и возвращает его.
Функция nextInt()принимает целочисленный параметр limit, который ограничивает число значениями от Random()0 до 6 в соответствии с weekмассивом.
fun randomDay() : String {
val week = arrayOf ("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday")
return week[Random().nextInt(week.size)]
}
- Функции `
Random()and` и `or`nextInt()определены в файле `java.util.*.`. В верхней части файла добавьте необходимый импорт:
import java.util.* // required import
- Запустите свою программу и проверьте результат.
⇒ Today is Tuesday and the fish eat pellets
Шаг 2: Используйте выражение `when`.
Развивая эту идею дальше, измените код так, чтобы он выбирал разные продукты для разных дней с помощью whenвыражения. Оператор whenаналогичен тому, что используется switchв других языках программирования, но whenавтоматически останавливается в конце каждой ветви. Это также гарантирует, что ваш код охватит все ветви, если вы проверяете перечисление.
- В файле Hello.kt добавьте функцию
fishFood(), которая принимает в качестве параметра деньStringи возвращает в качестве параметра корм для рыбы на этот деньString. Используйте функцию `getCareer()`when(), чтобы каждый день рыба получала определенный корм. Запустите программу несколько раз, чтобы увидеть разные результаты.
fun fishFood (day : String) : String {
var food = ""
when (day) {
"Monday" -> food = "flakes"
"Tuesday" -> food = "pellets"
"Wednesday" -> food = "redworms"
"Thursday" -> food = "granules"
"Friday" -> food = "mosquitoes"
"Saturday" -> food = "lettuce"
"Sunday" -> food = "plankton"
}
return food
}
fun feedTheFish() {
val day = randomDay()
val food = fishFood(day)
println ("Today is $day and the fish eat $food")
}
⇒ Today is Thursday and the fish eat granules
- Добавьте в выражение ветвь по умолчанию,
whenиспользуяelse`.`. Для тестирования, чтобы убедиться, что в вашей программе иногда используется ветвь по умолчанию, удалите ветви `Tuesdayи`Saturday.
Наличие ветви по умолчанию гарантирует, что foodзначение будет получено до возврата, поэтому инициализация больше не требуется. Поскольку код теперь присваивает строку foodтолько один раз, вы можете объявить foodеё с помощью valвместо var.
fun fishFood (day : String) : String {
val food : String
when (day) {
"Monday" -> food = "flakes"
"Wednesday" -> food = "redworms"
"Thursday" -> food = "granules"
"Friday" -> food = "mosquitoes"
"Sunday" -> food = "plankton"
else -> food = "nothing"
}
return food
}
- Поскольку каждое выражение имеет значение, этот код можно сделать немного лаконичнее. Верните значение выражения
whenнапрямую и уберитеfoodпеременную. Значение выраженияwhen— это значение последнего выражения ветви, удовлетворяющего условию.
fun fishFood (day : String) : String {
return when (day) {
"Monday" -> "flakes"
"Wednesday" -> "redworms"
"Thursday" -> "granules"
"Friday" -> "mosquitoes"
"Sunday" -> "plankton"
else -> "nothing"
}
}
Итоговая версия вашей программы будет выглядеть примерно так, как показано в приведенном ниже коде.
import java.util.* // required import
fun randomDay() : String {
val week = arrayOf ("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday")
return week[Random().nextInt(week.size)]
}
fun fishFood (day : String) : String {
return when (day) {
"Monday" -> "flakes"
"Wednesday" -> "redworms"
"Thursday" -> "granules"
"Friday" -> "mosquitoes"
"Sunday" -> "plankton"
else -> "nothing"
}
}
fun feedTheFish() {
val day = randomDay()
val food = fishFood(day)
println ("Today is $day and the fish eat $food")
}
fun main(args: Array<String>) {
feedTheFish()
}