日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )

發布時間:2025/6/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 简介 | 函数 / 属性扩展 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。