【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
文章目錄
- I . DSL 簡介
- II . Kotlin 函數(shù)擴展
- III . Kotlin 屬性擴展
I . DSL 簡介
1 . DSL ( Domain Specific Language ) 領(lǐng)域特定語言 : 針對某一個特定的領(lǐng)域的語言 , 如 SQL 語言 ;
2 . DSL 用途 : DSL 用于某個特定領(lǐng)域 , 主要是該領(lǐng)域的專家使用 , 通過簡單的編程 , 可以描述該領(lǐng)域中的事物 , 這個簡單的編程語言就是 DSL 領(lǐng)域特定語言 ; 如 SQL 是給數(shù)據(jù)庫管理員使用的管理數(shù)據(jù)庫的 DSL ;
3 . DSL 與 編程語言區(qū)別 :
① 使用者不同 : DSL 是特定領(lǐng)域的專家使用 , 編程語言是程序員使用 ;
② 作用范圍不同 : DSL 僅能表示特定領(lǐng)域的事物模型 , 編程語言可以表現(xiàn)任何事物和模型 ;
4 . 開發(fā) DSL 的要求 : 開發(fā)一種領(lǐng)域特定語言 , 需要能完整表現(xiàn)該領(lǐng)域的模型和事物 , 并且語言簡潔 , 接近真實語言 , 能對非編程人員隱藏該語言實現(xiàn)的細(xì)節(jié) ;
5 . Kotlin 中的 DSL : DSL 是 Kotlin 語言的特性之一 , 使用 DSL 可以讓函數(shù)調(diào)用非常接近真實的語言 ;
6 . Kotlin 中實現(xiàn) DSL 的原理 : Kotlin 中使用 ① 函數(shù)擴展 , ② Lambda 表達式 , ③ infix 中綴表達式 , ④ invoke 約定行為 , 等 Kotlin 特性原理實現(xiàn) DSL 開發(fā) ;
II . Kotlin 函數(shù)擴展
1 . 函數(shù)擴展作用 : Kotlin 中的函數(shù) / 屬性 擴展 , 可以為任意定義好的類 , 擴展任意函數(shù)或?qū)傩?;
2 . 函數(shù)擴展語法格式 : 為一個定義好的類在外部定義一個新的函數(shù) , 為 T 類型定義新的類 , 使用如下格式擴展函數(shù) ;
fun 要擴展函數(shù)的類型.擴展方法名(參數(shù)列表) : 返回值類型 {擴展的操作return 返回值類型變量 }3 . 函數(shù)擴展示例解析 : 集合的高階函數(shù) maxBy 就是對 Iterable 類型的函數(shù)胡擴展 ;
① 聲明泛型 : 其中 <T, R : Comparable> 是聲明泛型 ;
② 需要擴展函數(shù)類型 : Iterable 是要擴展函數(shù)的類型 ( 為該類擴展函數(shù) ) ;
③ 擴展函數(shù)名稱 : maxBy 是擴展的函數(shù)名稱 ;
④ 函數(shù)參數(shù) : selector: (T) -> R 是擴展函數(shù)的參數(shù) , 該參數(shù)類型是函數(shù)類型 ;
⑤ 擴展函數(shù)返回值 : T? 類型 , 后面的 ? 表示該參數(shù)不能為 空 ;
⑥ 方法體 : 在方法體中調(diào)用傳入的函數(shù)類型 , 獲取元素中符合 selector(T) 調(diào)用返回值 最大值的元素 ;
/*** 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 中的函數(shù) / 屬性 擴展 , 可以為任意定義好的類 , 擴展任意函數(shù)或?qū)傩?;
2 . 屬性擴展格式 : 為一個定義好的類在外部定義一個新的屬性 , 為 T 類型定義新的屬性 , 使用如下格式擴展函屬性 ;
var <被擴展屬性類型> 要擴展屬性的類型<被擴展的屬性類型>.被擴展的屬性名稱 : 被擴展的屬性類型//下面是被擴展屬性的 getter 和 setter 方法get(){return }set(value){}總結(jié)
以上是生活随笔為你收集整理的【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Kotlin】Kotlin 语言集合中
- 下一篇: 【Kotlin】Kotlin 领域特定语