Похожие презентации:
Kotlin_DSL_IntelliJ_Syntax
1. Kotlin Extensions, Infix & DSL
Kotlin Extensions, Infix & DSLIntelliJ 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
❌ Без DSLval 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, который:• ограничивает возможные действия
• ведёт пользователя по “правильному пути”
• Чем меньше свободы — тем меньше ошибок