【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
文章目錄
- I . DSL 簡介
- II . Kotlin 函數擴展
- III . Kotlin 屬性擴展
I . DSL 簡介
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 類型的函數胡擴展 ;
① 聲明泛型 : 其中 <T, R : Comparable> 是聲明泛型 ;
② 需要擴展函數類型 : 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 <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {val iterator = iterator()if (!iterator.hasNext()) return nullvar maxElem = iterator.next()if (!iterator.hasNext()) return maxElemvar maxValue = selector(maxElem)do {val e = iterator.next()val v = selector(e)if (maxValue < v) {maxElem = emaxValue = v}} while (iterator.hasNext())return maxElem }III . Kotlin 屬性擴展
1 . 屬性擴展作用 : Kotlin 中的函數 / 屬性 擴展 , 可以為任意定義好的類 , 擴展任意函數或屬性 ;
2 . 屬性擴展格式 : 為一個定義好的類在外部定義一個新的屬性 , 為 T 類型定義新的屬性 , 使用如下格式擴展函屬性 ;
var <被擴展屬性類型> 要擴展屬性的類型<被擴展的屬性類型>.被擴展的屬性名稱 : 被擴展的屬性類型//下面是被擴展屬性的 getter 和 setter 方法get(){return }set(value){}總結
以上是生活随笔為你收集整理的【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kotlin】Kotlin 语言集合中
- 下一篇: 【Kotlin】Kotlin 领域特定语