4. Изучите значения по умолчанию и компактные функции

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

В Kotlin вы можете передавать аргументы по имени параметра. Вы также можете указывать значения по умолчанию для параметров: если аргумент не указан вызывающей стороной, используется значение по умолчанию. Впоследствии, при написании методов (функций-членов), это позволяет избежать создания множества перегруженных версий одного и того же метода.

  1. В файле Hello.kt напишите swim()функцию с Stringпараметром speed, которая выводит скорость рыбы. speedПараметр имеет значение по умолчанию "fast".
fun swim(speed: String = "fast") {
   println("swimming $speed")
}
  1. Из main()функции можно вызвать её swim()тремя способами. Сначала вызовите функцию, используя значение по умолчанию. Затем вызовите функцию, передав speedпараметр без указания имени, а затем вызовите функцию, указав имя speedпараметра.
swim()   // uses default speed
swim("slow")   // positional argument
swim(speed="turtle-like")   // named parameter
⇒ swimming fast
swimming slow
swimming turtle-like

Если для параметра не указано значение по умолчанию, всегда необходимо передавать соответствующий аргумент.

  1. В файле Hello.kt напишите shouldChangeWater()функцию, которая принимает три параметра: day, temperature, и dirtyуровень. Функция возвращает значение true, указывающее, следует ли менять воду (это происходит, если сегодня воскресенье, если температура слишком высокая или если вода слишком грязная). День недели обязателен, но температура по умолчанию равна 22, а уровень загрязнения по умолчанию равен 20.

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

fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
    return when {
        temperature > 30 -> true
        dirty > 30 -> true
        day == "Sunday" ->  true
        else -> false
    }
}
  1. Укажите shouldChangeWater()дату feedTheFish()и время вызова. dayПараметр не имеет значения по умолчанию, поэтому необходимо указать аргумент. Два других параметра shouldChangeWater()имеют значения по умолчанию, поэтому передавать для них аргументы не требуется.
fun feedTheFish() {
    val day = randomDay()
    val food = fishFood(day)
    println ("Today is $day and the fish eat $food")
    println("Change water: ${shouldChangeWater(day)}")
}
=> Today is Thursday and the fish eat granules
Change water: false

Выражение when, которое вы написали на предыдущем шаге, содержит много логики в небольшом объеме кода. Если бы вы хотели немного упростить его или если бы условия проверки были более сложными, вы могли бы использовать несколько локальных переменных с подходящими именами. Но в Kotlin это делается с помощью компактных функций.

Компактные функции, или функции с одним выражением , — это распространенный шаблон в Kotlin. Когда функция возвращает результат одного выражения, вы можете указать тело функции после символа =, опустить фигурные скобки {}и опустить return.

  1. В файле Hello.kt добавьте компактные функции для проверки условий.
fun isTooHot(temperature: Int) = temperature > 30

fun isDirty(dirty: Int) = dirty > 30

fun isSunday(day: String) = day == "Sunday"
  1. Измените код shouldChangeWater(), чтобы вызывать новые функции.
fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = 20): Boolean {
    return when {
        isTooHot(temperature) -> true
        isDirty(dirty) -> true
        isSunday(day) -> true
        else  -> false
    }
}
  1. println()Запустите свою программу . Вывод shouldChangeWater()должен быть таким же, как и до перехода на использование компактных функций.

Значение по умолчанию для параметра не обязательно должно быть значением. Это может быть другая функция, как показано в следующем фрагменте примера:

fun shouldChangeWater (day: String, temperature: Int = 22, dirty: Int = getDirtySensorReading()): Boolean {
    ...

Последнее изменение: Воскресенье, 5 апреля 2026, 12:28