- I . DSL 简介
- II . Kotlin 函数扩展
- III . Kotlin 属性扩展
1 . DSL ( Domain Specific Language ) 领域特定语言 : 针对某一个特定的领域的语言 , 如 SQL 语言 ;
2 . DSL 用途 : DSL 用于某个特定领域 , 主要是该领域的专家使用 , 通过简单的编程 , 可以描述该领域中的事物 , 这个简单的编程语言就是 DSL 领域特定语言 ; 如 SQL 是给数据库管理员使用的管理数据库的 DSL ;
3 . DSL 与 编程语言区别 :
① 使用者不同 : DSL 是特定领域的专家使用 , 编程语言是程序员使用 ;
② 作用范围不同 : DSL 仅能表示特定领域的事物模型 , 编程语言可以表现任何事物和模型 ;
4 . 开发 DSL 的要求 : 开发一种领域特定语言 , 需要能完整表现该领域的模型和事物 , 并且语言简洁 , 接近真实语言 , 能对非编程人员隐藏该语言实现的细节 ;
5 . Kotlin 中的 DSL : DSL 是 Kotlin 语言的特性之一 , 使用 DSL 可以让函数调用非常接近真实的语言 ;
6 . Kotlin 中实现 DSL 的原理 : Kotlin 中使用 ① 函数扩展 , ② Lambda 表达式 , ③ infix 中缀表达式 , ④ invoke 约定行为 , 等 Kotlin 特性原理实现 DSL 开发 ;
II . Kotlin 函数扩展1 . 函数扩展作用 : Kotlin 中的函数 / 属性 扩展 , 可以为任意定义好的类 , 扩展任意函数或属性 ;
2 . 函数扩展语法格式 : 为一个定义好的类在外部定义一个新的函数 , 为 T 类型定义新的类 , 使用如下格式扩展函数 ;
fun 要扩展函数的类型.扩展方法名(参数列表) : 返回值类型
{
扩展的操作
return 返回值类型变量
}
3 . 函数扩展示例解析 : 集合的高阶函数 maxBy 就是对 Iterable 类型的函数胡扩展 ;
① 声明泛型 : 其中 是声明泛型 ;
② 需要扩展函数类型 : Iterable 是要扩展函数的类型 ( 为该类扩展函数 ) ;
③ 扩展函数名称 : maxBy 是扩展的函数名称 ;
④ 函数参数 : selector: (T) -> R 是扩展函数的参数 , 该参数类型是函数类型 ;
⑤ 扩展函数返回值 : T? 类型 , 后面的 ? 表示该参数不能为 空 ;
⑥ 方法体 : 在方法体中调用传入的函数类型 , 获取元素中符合 selector(T) 调用返回值 最大值的元素 ;
/**
* Returns the first element yielding the largest value of the given function
* or `null` if there are no elements.
*
* @sample samples.collections.Collections.Aggregates.maxBy
*/
public inline fun Iterable.maxBy(selector: (T) -> R): T? {
val iterator = iterator()
if (!iterator.hasNext()) return null
var maxElem = iterator.next()
if (!iterator.hasNext()) return maxElem
var maxValue = selector(maxElem)
do {
val e = iterator.next()
val v = selector(e)
if (maxValue
关注
打赏
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
- 【Android Gradle 插件】Gradle 构建生命周期 ③ ( BuildListener 构建监听器 | TaskExecutionGraphListener 任务执行图监听器 )
- 【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
- 【Android Gradle 插件】Gradle 构建生命周期 ① ( 分析构建脚本 | 执行初始化配置 | 执行 Gradle 任务 | Project#beforeEvaluate 函数 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑨ ( 控制 Gradle 执行任务顺序 | Task#finalizedBy 函数 | 控制 Gradle 执行任务顺序示例分析 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )