Kotlin领域特定语言(DSL)
2018-03-30 10:19
387 查看
Kotlin领域特定语言(DSL)
DSL是什么
对笔者来说DSL是一个既熟悉又陌生的词,总感觉经常看到但是又不知道它具体是什么。为了便于理解就要提到
编程语言,对于这个我们就再熟悉不过了,比如Java、kotlin都属于
编程语言,而
DSL全称为“领域特定语言”。以下为两者的对比:
编程语言:有一系列足够完善的能力来解决几乎所有能被计算机解决的问题。
DSL:专注在特定任务,或者说领域上,并放弃与该领域无关的功能。
可以看出,专门针对某一特殊功能所存在的语言并且仅能完成这部分功能的语言我们称之为领域特定语言。常见的有
DSL有SQL和正则表达式。
内嵌DSL
内嵌DSL作为kotlin的一种新特性,可以方便我们的开发。那为什么要使用内嵌DSL而不是直接使用呢,以SQL为例。这些语言为了更有效的完成它们的目标,通过会减少它们提供的功能,因此当你需要执行一个SQL语句的时候,不用声明一个类或者方法,每一个关键字就代表了需要执行的操作和类型,每种类型的操作都有自己独特的语法和针对特定任务的关键字集合。
并且往往DSL语言更趋向于声明式,和通用编程语言相反,大部分是命令。
这导致直接使用DSL有个缺点:它们很难与使用通用编程语言的宿主应用程序结合起来使用。简单来说就是语法不同,需要以字符串等其他形式传入,不便于及时纠错。
示例
Anko SQLite(SQL)
fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use { db.select("Users") .whereSimple("family_name = ?", "John") .doExec() .parseList(UserParser) }
Anko Layouts(XML)
verticalLayout { val name = editText() button("Say Hello") { onClick { toast("Hello, ${name.text}!") } } }
总结
kotlin用内嵌DSL的方式让一些特殊领域语言的编写变得更加容易和统一。当熟练后甚至可以不用再写XML文件来布局,不用再写难记又不方便调试的SQL语句。(虽然就本人而言其实还是习惯用XML写布局)其实现的原理也很简单,实际上就是普通的方法基于lambda表达式的形式完成高度简洁的代码风格。说白了就是以代码形式完成以上的功能,不过这些代码是经过kotlin深度封装和优化的。
相关文章推荐
- Kotlin领域特定语言(DSL)
- 领域特定语言DSL
- 领域特定语言DSL
- DSL Domain-specific language 领域特定语言/领域专用语言
- 使用Antlr开发DSL(领域特定语言)-java
- DSL Domain-specific language 领域特定语言/领域专用语言
- 基于领域特定语言(DSL)的用例驱动开发(UDD)
- 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)
- 正则表达式与领域特定语言(DSL)
- 闭包在DSL中的应用,领域特定语言的笔记
- [2017-08-25]100行CSharp代码利用dynamic写个DSL(特定领域语言)
- ★软件架构DSL领域特定语言初探[
- 《Groovy极简教程》第8章 Groovy:领域特定语言(DSL)
- 如何设计一门语言(十)——正则表达式与领域特定语言(DSL)
- 利用C++、scala等语言的运算符重载功能定制领域特定语言(DSL,Domain-Specific Language )
- dsl领域特定语言
- Kafka Streams开发人员指南之流领域特定语言(Streams DSL)
- 用Ruby 创建领域特定语言(DSL)
- DSL:领域特定语言学习笔记 一
- 七周七语言之用Io编写领域特定语言