Kotlin-46.JavaScript動態類型(Dynamic Type)

官方文檔: http://kotlinlang.org/docs/reference/dynamic-type.html

動態類型(Dynamic Type)

Kotlin在面向JVM平臺的代碼中不支持動態類型(說白了就是java不支持動態類型)

Kotlin是一種靜態類型的語言,但仍然需要與無類型或鬆散類型的語言互操作(例如JavaScript系統)!
爲了幫助這些場景,kotLin語言中可用dynamic類型:
    val dyn: dynamic = ...
dynamic類型基本關閉了Kotlin類型檢查系統:
    dynamic類型類型的值可以賦值給任何變量或作爲參數傳遞到任何位置;
    任何值都可以賦值給dynamic類型變量,或者傳遞給一個接受dynamic作爲參數的函數;
    null檢查禁用;

dynamic最特別的特性是,可以對dynamic變量調用任何屬性或以任意參數調用任何函數:
    val dyn: dynamic = ...
    dyn.whatever(1, "foo", dyn) // 'whatever'沒有定義
    dyn.whatever(*arrayOf(1, 2, 3))

在JavaScript平臺上,該kotlin代碼按原樣編譯: 在生成的JavaScript代碼中,Kotlin的dyn.whatever(1)變爲dyn.whatever(1)    
當在dynamic類型的值上調用,可能需要使用@JsName註解爲要調用的函數分配名稱!

函數動態調用總是返回dynamic,所以可以自由地鏈式調用:
    dyn.foo().bar.baz()

把lambda表達式傳給一個動態調用時,它的所有參數默認都是dynamic類型:
    dyn.foo {
        x -> x.bar() // x 是 dynamic
    }

使用dynamic類型值的表達式會按原樣轉換爲JavaScript,並且不使用Kotlin約定的運算符,支持以下運算符:
    二元(binary):            +, -, *, /, %, >, < >=, <=, ==, !=, ===, !==, &&, ||
    一元(unary)
        前置(prefix):         -, +, !
        前置及後置(postfix):  ++, --
    賦值(assignments):        +=, -=, *=, /=, %=
    索引訪問(indexed access):
        讀(read):             d[a], []多於一個參數會出錯
        寫(write):            d[a1] = a2, []多於一個參數會出錯

注意: in, !in以及..操作符,對於dynamic類型是被禁用(在JavaScript平臺被禁用)!

簡書:http://www.jianshu.com/p/5f07f026edcf
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/75579094
GitHub博客:http://lioil.win/2017/07/20/Kotlin-JS-dynamic-type.html
Coding博客:http://c.lioil.win/2017/07/20/Kotlin-JS-dynamic-type.html

發佈了156 篇原創文章 · 獲贊 38 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章