中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kotlin是什么意思

發布時間:2022-01-11 16:55:20 來源:億速云 閱讀:878 作者:柒染 欄目:編程語言

Kotlin是什么意思,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、Kotlin是什么

Kotlin 是一個用于現代多平臺應用的靜態編程語言,由 JetBrains 開發。Kotlin可以編譯成Java字節碼,也可以編譯成JavaScript,方便在沒有JVM的設備上運行。Kotlin已正式成為Android官方支持開發語言。

二、Kotlin的就應用領域

學完kotlin能成為全棧工程師。

不僅能編寫web前端,web后端,Android移動端,還可以編寫server腳本,桌面游戲。

三、Kotlin的特點

靜態強類型性語言

運行在JVM上

可編譯成JavaScript代碼

與Java100%兼容

四、Kotlin的發展趨勢

2011年進行開源,2017年在github上star數量已經達到17k。目前 花瓣、豆瓣 APP 以及 JetBrains 全線編輯器都在使用 Kotlin,國內很多初創公司也都

在使用 Kotlin(尤其是應用于 Android 開發)

五、Kotlin的優勢

全面支持Lambda表達式

數據類(Data classes)

函數字面量和內聯函數(Function literals & inline functions)

函數擴展(Extension functions)

空安全(Null safety)

智能轉換(Smart casts)

字符串模版(String templates)

主構造函數(Primary constructors)

類委托(Class delegation)

類型推斷(Type inference)

單例(Singletons)

聲明點變量(Declaration-site variance)

區間表達式(Range expressions)

六、Kotlin中的函數

內聯函數

Android開發中,打印信息一般我們會用到Log類,Log中每個方法我們都要傳兩個參數,第一個tag參數在Kotlin中我們可以像下面封裝一下,這樣就只需要傳一個參數。

inline fun <reified T> T.debug(log:Any)

{

Log.d(T::class.simpleName, log.toString())

}

它可以通過泛型參數 T 來獲取到T的具體類型,并且拿到它的類名&mdash;&mdash;當然,如果你愿意,你甚至可以調用它的構造方法來構造一個對象出來&mdash;&mdash;為什么 Kotlin 可以做到呢?因為這段代碼是 inline 的,最終編譯時是要編譯到調用它的代碼塊中,這時候T的類型實際上是確定的,因而 Kotlin 通過 reified 這個關鍵字告訴編譯器,T 這個參數可不只是個擺設,我要把它當實際類型來用。

在高階函數前增加inline注解可以指定函數內聯,inline 標記即影響函數本身也影響傳遞進來的 lambda 函數:所有的這些都將被關聯到調用點。內聯可能會引起生成代碼增長,但我們可以合理的解決它(不要內聯太大的函數)。也可以使用noinline來指定某些函數不進行內聯。

inline fun foo(inlined: () -> Uint, @noinline notInlined: () -> Unit) {

//...

}

可以內聯的 lambda 表達式只能在內聯函數內部調用或者作為可內聯的參數傳遞, 但是 noinline 的可以以任何我們喜歡的方式操作:存儲在字段中、傳送它等等。

單表達式函數

如果一個函數的函數體只有一個表達式,函數體可以直接寫在 “=”之后,也就是這樣:

fun double(x: Int): Int = x * 2

fun eval(expr: Expr): Double = when(expr) {

is Expr.Const -> expr.number

is Expr.Sum -> eval(expr.e1) + eval(expr.e2)

Expr.NotANumber -> Double.NaN

// the `else` clause is not required because we've covered all the cases

}

這里使用了when關鍵字,類似于java中的switch,但比之更強大。

匿名函數

/**

* 匿名函數,沒有名字,其他語法和常規函數類似

*

* 聲明一個匿名函數,這里用表達式來表示函數體,也就是單表達式函數

*/

var test3= fun(x:Int,y:Int):Int=x+y

/**

* 聲明一個匿名函數,這里用代碼塊來表示函數體

*/

var test4= fun(x:Int,y:Int):Int {

return x+y

}

/**

* 聲明一個匿名函數,當返回值類型可以推斷出,可以省略

*/

var test5= fun(x:Int,y:Int)=x+y

fun main(args: Array<String>) {

println(test3(1,2))

println(test4(1,2))

println(test5(1,2))

}

高階函數與lambda表達式

高階函數就是可以接受函數作為參數或返回一個函數的函數。比如 lock() 就是一個很好的例子

fun lock<T>(lock: Lock, body: () -> T ) : T {

lock.lock()

try {

return body()

}

finally {

lock.unlock()

}

}

關于Kotlin是什么意思問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永昌县| 巴林右旗| 临潭县| 长海县| 丰台区| 谷城县| 台南县| 南召县| 邢台县| 封开县| 敦煌市| 汾西县| 南华县| 扎鲁特旗| 金乡县| 台江县| 花莲市| 深泽县| 巴彦县| 北宁市| 西乌珠穆沁旗| 临高县| 吴桥县| 略阳县| 禄丰县| 沈丘县| 方正县| 积石山| 梅河口市| 长海县| 刚察县| 东平县| 宕昌县| 博兴县| 甘肃省| 莆田市| 蓬溪县| 平定县| 福清市| 德昌县| 景洪市|