第14章 使用 Kotlin DSL

我们在前面的章节中,已经看到了 Kotlin DSL 的强大功能。例如Gradle 的配置文件 build.gradle (Groovy),以及前面我们涉及到的Gradle Script Kotlin(Kotlin)、Anko(Kotlin)等,都是 DSL。我们可以看出,使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。

本章就让我们一起来学习一下 使用 Kotlin 创建 DSL的相关内容。

我们在上一章中已经看到了在 Android 中使用下面这样的 嵌套DSL 风格的代码来替代 XML 式风格的视图文件

1. UI {
2. // AnkoContext

4. verticalLayout {
5. padding = dip(30)
6. var title = editText {
7. // editText 视图
8. id = R.id.todo_title
9. hintResource = R.string.title_hint
10. }

12. var content = editText {
13. id = R.id.todo_content
14. height = 400
15. hintResource = R.string.content_hint
16. }
17. button {
18. // button 视图
19. id = R.id.todo_add
20. textResource = R.string.add_todo
21. textColor = Color.WHITE
22. setBackgroundColor(Color.DKGRAY)
23. onClick { _ -> createTodoFrom(title, content) }
24. }
25. }
26. }

相比 XML 风格的 DSL(XML 本质上讲也是一种 DSL),明显使用原生的编程语言(例如Kotlin)DSL 风格更加简单干净,也更加自由灵活。

Kotlin DSL 的编程风格是怎样的呢?以及其背后实现的原理是怎样的呢?下面就让我一起来探讨一下。