Аргументы по умолчанию

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

Функции с аргументами по умолчанию

Kotlin может присваивать значения по умолчанию параметрам функции в объявлении функции. Чтобы вызвать эту функцию, вы можете опустить аргументы со значениями по умолчанию или вызвать ее обычным способом.

Вот функция с именем printLine с двумя параметрами. Первый параметр определяет строку, второй параметр — это строка, которая заканчивается этой строкой. Оба параметра имеют значения по умолчанию: пустая строка ("") и новая строка ("\n").

fun printLine(line: String = "", end: String = "\n") = print("$line$end")

Взгляните на этот пример — мы присваиваем значения параметрам с помощью оператора = после типов.

Взгляните на полный фрагмент кода. Он имеет следующие функции: printLine и main.

fun printLine(line: String = "", end: String = "\n") = print("$line$end")

fun main() {
    printLine("Hello, Kotlin", "!!!") // пишет "Hello, Kotlin!!!"
    printLine("Kotlin") // пишет "Kotlin" с переносом строки
    printLine() // пишет пустую строку, аналогично работе println()
}

Во время первого вызова функции передаются два аргумента ("Hello, Kotlin" и "!!!"). Во время второго вызова передается только один аргумент ("Kotlin"), значение второго параметра равно умолчанию ("\n"). Во время третьего вызова мы вообще не передаем никаких аргументов, но это все равно работает, потому что оба параметра имеют значения по умолчанию.

Программа выводит:

Hello, Kotlin!!!Kotlin

Смешивание обычных и аргументов по умолчанию

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

fun findMax(n1: Int, n2: Int, absolute: Boolean = false): Int {
    val v1: Int
    val v2: Int

    if (absolute) {
        v1 = Math.abs(n1)
        v2 = Math.abs(n2)
    } else {
        v1 = n1
        v2 = n2
    }

    return if (v1 > v2) n1 else n2
}

fun main() {
    println(findMax(11, 15)) // 15
    println(findMax(11, 15, true)) // 15
    println(findMax(-4, -9)) // -4
    println(findMax(-4, -9, true)) // -9
}

В теле функции findMax мы объявляем две временные переменные. Они хранят абсолютные значения или одинаковые значения аргументов, в зависимости от значения absolute. Последняя строка сравнивает временные переменные, и возвращает значение соответствующего аргумента.

Мы вызываем функцию findMax в теле main четыре раза. Первый вызов возвращает максимальное значение (15), второй вызов возвращает максимальное значение положительных чисел (15), третий вызов возвращает максимальное значение двух отрицательных чисел (-4), а последний вызов возвращает максимальное значение по абсолютному значению двух отрицательных чисел.

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

Идиомы

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

fun foo(a: Int = 0, b: String = "") {

}

Заключение

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

Last updated