Kotlin Extensions, Infix & DSL
Extension функции
Infix функции
Lambda with Receiver
Как DSL работает внутри
Kotlin DSL = обычный Kotlin + ограничения
272.14K

Kotlin_DSL_IntelliJ_Syntax

1. Kotlin Extensions, Infix & DSL

Kotlin Extensions, Infix & DSL
IntelliJ IDEA style · DSL · Lambda with Receiver

2. Extension функции

Что такое extension:
• Функция, вызываемая как
метод класса
• Добавляет поведение без
изменения класса
Ограничения:
• Не добавляет поля и состояние
• Не может переопределять методы
• Разрешается статически (compiletime)
• Не имеет backing field
• Не видит private, protected
Extension функция не является частью класса,
даже если она объявлена в том же файле.

3. Infix функции

Зачем нужны:
• Код читается как язык
• Основа DSL
• Тесты
Ограничения:
• ровно 1 параметр
• без vararg и default
• member или extension
• вызывается без . и ()

4. Lambda with Receiver

❌ Без DSL
val user = User()
user.name = "Alex"
user.age = 25
user.email = "a@mail.com"
✅ С DSL
val user = user {
name = "Alex"
age = 25
email = "a@mail.com"
}

5. Как DSL работает внутри

fun user(block: User.() -> Unit): User {
val user = User()
user.block()
return user
}
• block — lambda with receiver
• User становится this
• Позволяет писать DSL

6. Kotlin DSL = обычный Kotlin + ограничения

DSL — это API, который:
• ограничивает возможные действия
• ведёт пользователя по “правильному пути”
• Чем меньше свободы — тем меньше ошибок
English     Русский Правила