← Усі уроки

Kotlin Fundamentals · Модуль «Функції» · Урок 3 з 8 · ~6 хв

Значення за замовчуванням та іменовані аргументи

Як уникнути купи перевантажених версій однієї функції.

1. Значення за замовчуванням

Параметр можна забезпечити значенням «на випадок, якщо його не передадуть»:

fun greet(name: String, greeting: String = "Привіт") {
    println("$greeting, $name!")
}

greet("Олена")                    // Привіт, Олена!
greet("Олена", "Доброго ранку")   // Доброго ранку, Олена!
Це заміняє перевантаження функцій (overloading) з інших мов — одна функція замість кількох варіантів з різною кількістю параметрів.
Скільки разів довелось би оголошувати перевантажену (overload) версію функції greet без default-параметра, щоб підтримати виклик і з привітанням, і без нього?

2. Іменовані аргументи

При виклику можна вказати ім'я параметра — тоді порядок не має значення, і можна пропустити будь-які default-параметри:

fun reformat(
    str: String,
    normalizeCase: Boolean = true,
    wordSeparator: Char = ' ',
) { /* ... */ }

reformat("String!", wordSeparator = '_')
Правило: якщо один аргумент переданий іменовано, всі наступні за ним теж мають бути іменовані.
Чи можна написати виклик reformat(wordSeparator = '_', "String!") — тобто спершу іменований, а потім позиційний аргумент? (так/ні)

3. Практика

Напишіть функцію fun power(base: Int, exponent: Int = 2): Int, яка повертає base у степені exponent (циклом for — ви це вже вмієте). Викличте її двома способами: power(5) і power(2, exponent = 10).

🎮 Спробуйте в браузері

Допишіть у main виклик power з практичного завдання вище і перевірте результат.

Не завантажується? Відкрити напряму →

Довідка

Повний синтаксис і глосарій — у довіднику «Функції в Kotlin — шпаргалка».