Kotlin DSL строится на trailing lambda, receivers (Type.() -> Unit), invoke/operator и иногда @DslMarker.
Разбор
- Пример: Gradle Kotlin DSL, Jetpack Compose (похожий стиль).
html { body { +"text" } }.
@DslMarker ограничивает nested receivers.
- Scope functions + extension — кирпичи DSL.
Пример
class Menu {
private val items = mutableListOf<String>()
fun item(title: String) { items += title }
}
fun menu(block: Menu.() -> Unit) = Menu().apply(block)
Итог
DSL = type-safe builders через receivers и лямбды.