Kotlin Fundamentals · Довідка

Функції в Kotlin — шпаргалка

Компактний довідник для швидкого повторення перед іспитом чи практикою.

1. Оголошення функції

fun double(x: Int): Int {
    return 2 * x
}
ЧастинаЗначення
funключове слово оголошення функції
doubleім'я функції
(x: Int)параметри: ім'я: Тип
: Intтип значення, яке повертає функція
Параметри всередині функції — це val: їх не можна переприсвоїти.

2. Unit — «нічого не повертає»

fun printSum(a: Int, b: Int): Unit {
    println(a + b)
}

// : Unit можна не писати — це типова поведінка
fun printSum(a: Int, b: Int) {
    println(a + b)
}

3. Функції-вирази (single-expression)

Якщо тіло функції — один вираз, можна опустити фігурні дужки, return і тип повернення (компілятор виведе його сам).

fun double(x: Int): Int = x * 2

// тип виведено автоматично
fun double(x: Int) = x * 2
Тип можна опустити тільки для функцій-виразів (з =). Для функцій із тілом у { } тип потрібно писати явно (окрім Unit).

4. Значення за замовчуванням (default arguments)

fun read(
    b: ByteArray,
    off: Int = 0,
    len: Int = b.size,
) { /* ... */ }

read(data)              // off = 0, len = data.size
read(data, 2)           // off = 2, len = data.size
read(data, 2, 10)       // усі три задано явно
Це заміняє перевантаження функцій (overloading) з інших мов — одна функція замість кількох варіантів з різною кількістю параметрів.

5. Іменовані аргументи (named arguments)

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

reformat(
    "String!",
    normalizeCase = false,
    divideByCamelHumps = true,
)
Позиційний викликІменований виклик
порядок аргументів важливийпорядок можна змінювати
незручно з default-параметрамиможна пропускати будь-які default-параметри
Не можна змішувати: після першого іменованого аргументу всі наступні теж мають бути іменовані.

6. Змінна кількість аргументів (vararg)

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts) result.add(t)
    return result
}

val list = asList(1, 2, 3)   // [1, 2, 3]

Усередині функції vararg-параметр поводиться як масив (Array<T>).

Spread-оператор *

Щоб передати вміст готового масиву у vararg-параметр, використовують *:

val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4)   // [-1, 0, 1, 2, 3, 4]
Без * компілятор спробує передати сам масив як один елемент — і не скомпілюється, якщо типи не збігаються.

7. Порядок параметрів

vararg-параметр зазвичай ставлять останнім у списку параметрів. Якщо після нього є ще параметри, їх обов'язково потрібно передавати як іменовані аргументи.

Глосарій

параметр (parameter)
змінна, оголошена в сигнатурі функції
аргумент (argument)
конкретне значення, яке передають у параметр при виклику
сигнатура функції
ім'я + список параметрів з типами + тип повернення
default argument
значення параметра за замовчуванням, яке підставляється, якщо аргумент не передано
named argument
аргумент, переданий через ім'я = значення, незалежно від позиції
single-expression function
функція без { }, тіло якої — один вираз після =
vararg
модифікатор параметра, що дозволяє передати довільну кількість аргументів одного типу
spread-оператор (*)
розгортає масив в окремі аргументи vararg-параметра

Джерело: Kotlin Docs — Functions

← Усі уроки