第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
  3. verticalLayout {
  4. padding = dip(30)
  5. var title = editText {
  6. // editText 视图
  7. id = R.id.todo_title
  8. hintResource = R.string.title_hint
  9. }
  10. var content = editText {
  11. id = R.id.todo_content
  12. height = 400
  13. hintResource = R.string.content_hint
  14. }
  15. button {
  16. // button 视图
  17. id = R.id.todo_add
  18. textResource = R.string.add_todo
  19. textColor = Color.WHITE
  20. setBackgroundColor(Color.DKGRAY)
  21. onClick { _ -> createTodoFrom(title, content) }
  22. }
  23. }
  24. }

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

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