一、DSL的概念
只在特定领域内使用的语言
例如:
—HTML、Gradle、SQL等等
特点:
计算机编程语言
具有语言的表达能力
有限的表达能力
关注某个特定的领域
二、下面用DSL来写一个例子吧
需要下面五个类:
三、创建一个Node节点的接口
package cn.kotliner.kotlin
/**
* @author:wangdong
* @description:1.Node节点的接口
*/
interface Node {
//每个节点都应该有一个render方法
//例如对于HTML标签,它的render方法应该输出什么
fun render(): String
}
四、写一个通用的Tag类,实现这个接口
package cn.kotliner.kotlin
/**
* @author:wangdong
* @description:2.通用的tag类
*/
/***
* 实现了Node接口
* Tag类需要Open,以便其他类继承
*/
open class Tag(val name: String): Node{
//1.定义一个Node节点的list
val children = ArrayList<Node>()
//定一个表现属性的Map
val properties = HashMap<String,String>()
//定义一个String的扩展方法,参数是String
operator fun String.invoke(value: String){
properties[this] = value
}
//定义一个String加法的拓展
operator fun String.unaryPlus(){
children.add(StringNode(this))
}
//定义一个添加运算符
operator fun plus(node: Node){
children.add(node)
}
//定义一个String的扩展方法,参数是Tag.()<