Шаг 43.
Основы Kotlin.
Функции. Перегрузка функций

    На этом шаге мы рассмотрим особенности исполнения этой операции.

    Функцию castFireball(), которую вы объявили, со своим аргументом по умолчанию для параметра numFireballs, можно вызвать двумя способами:

    castFireball()
    castFireball(numFireballs)

    Если функция имеет несколько реализаций, как, например, castFireball(), то ее называют перегруженной.

    Перегруженность не всегда является последствием аргумента по умолчанию. Можно реализовать несколько функций с одним и тем же именем. Чтобы увидеть, как это работает, откройте Kotlin REPL (Tools | Kotlin | Kotlin REPL) и введите следующий код.

fun performCombat() {
    println("You see nothing to fight!")
}
fun performCombat(enemyName: String) {
    println("You begin fighting $enemyName.")
}
fun performCombat(enemyName: String, isBlessed: Boolean) { 
    if ((isBlessed)) {
        println("You begin fighting $enemyName. You are blessed with 2X damage!")
    } else {
        println("You begin fighting $enemyName.")
    }
}


Рис.1. Объявление перегруженной функции (REPL)

    Вы объявили три реализации функции performCombat (Начать битву). Все они являются функциями Unit без возвращаемого значения. Первая не принимает аргументов. Вторая принимает только один аргумент - имя противника. Последняя принимает два аргумента: имя противника и булеву переменную, с признаком благословения игрока. Каждая функция генерирует отдельное сообщение (или сообщения) через вызов println().

    Когда вы вызываете performCombat(), как оболочка REPL понимает, какая именно вам нужна? Она проверит переданные аргументы и найдет ту функцию, которая соответствует им. Вызовите в REPL реализацию каждой функции performCombat(), как показано ниже.

  performCombat() 
  performCombat("Ulrich") 
  performCombat("Hildr", true) 

    Вызов и вывод будет таким:


Рис.2. Вызов и вывод перегруженной функции (REPL)

    Обратите внимание, что выбор той или иной реализации осуществляется на основе количества аргументов.

    На следующем шаге мы рассмотрим имена функций в обратных кавычках.




Предыдущий шаг Содержание Следующий шаг