← Усі уроки

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

Посилання на функції (::)

Якщо потрібна функція вже існує — не пишіть лямбду заново, передайте посилання на неї.

1. Проблема

Уявіть, що функція isEven уже написана:

fun isEven(n: Int) = n % 2 == 0

Якщо десь потрібна лямбда типу (Int) -> Boolean, можна написати обгортку:

check(4, { n -> isEven(n) })

Але це зайвий код — isEven вже має потрібний тип.

2. Оператор ::

Замість обгортки можна передати посилання на функцію через :::

check(4, ::isEven)

Це працює, бо isEven має тип (Int) -> Boolean — точнісінько той, якого очікує check.

3. Посилання як значення

Посилання можна й зберегти у змінну — так само, як лямбду:

val check: (Int) -> Boolean = ::isEven
check(4)  // true
Правило вибору: пишіть лямбду { }, коли логіка коротка й потрібна лише тут. Використовуйте ::ім'я, коли потрібна функція вже існує окремо.
Посилання на методи конкретних об'єктів (foo::toString) і на конструктори (::ClassName) працюють за тим самим принципом — до них повернемось, коли розглянемо класи.
Перепишіть коротше через посилання на функцію: check(4, { n -> isEven(n) })
Який оператор перетворює ім'я вже оголошеної функції на посилання, яке можна передати як аргумент?

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

Додайте свою функцію-предикат (наприклад, isPositive) і передайте її посиланням у check.

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

Модуль завершено. Ви пройшли шлях від звичайного оголошення функції до передавання функцій як значень — це основа для роботи з колекціями (map, filter тощо), яку розглянемо в наступних темах.

Довідка

Синтаксис і глосарій — у довіднику «Лямбди та функції вищого порядку». Першоджерело: Kotlin Docs — Function references.