[TOC]
有時候可以通過給對象插入多個成員函數做差別是很友善的:
多重聲明一次建立了多個變量。我們聲明了倆個新變量:name age 并且可以獨立使用:
也可以在 for 循環中用:
map:
函數操作符是<code>:</code>
is !is 表達式: 類似Java的instanceof
“不安全”的轉換符,如下的x不能為空,否則抛異常:
"安全"轉換符,如下不管 as? 右邊的是不是一個非空 String 結果都會轉換為可空的:
如果 this 沒有應用者,則指向的是最内層的閉合範圍。為了在其它範圍中傳回 this ,需要使用标簽:<code>this@lable</code>
在 kotlin 中有兩種相等:
參照相等: <code>===</code>,參照相等是通過 === 操作符判斷的(不等是!== ) a===b 隻有 a b 指向同一個對象是判别才成立。另外,你可以使用内聯函數<code>identityEquals()</code> 判斷參照相等。
結構相等: <code>==</code>,結構相等是通過 == 判斷的。像<code>a == b</code>将會翻譯成:<code>a?.equals(b) ?: b === null</code>,如果 a 不是 null 則調用 equals(Any?) 函數,否則檢查 b 是否參照等于 null。
<a href="http://kotlinlang.org/docs/reference/operator-overloading.html">http://kotlinlang.org/docs/reference/operator-overloading.html</a>
安全調用在鍊式調用是是很有用的。比如,如果 Bob 是一個雇員可能配置設定部門(也可能不配置設定),如果我們想擷取 Bob 的部門名作為名字的字首,就可以這樣做:
Elvis 操作符:
也可以使用 Elvis 操作符<code>?:</code>:
如果 ?: 左邊表達式不為空則傳回,否則傳回右邊的表達式。注意右邊的表帶式隻有在左邊表達式為空是才會執行。
!!操作符:
第三個選擇是 NPE-lovers。我們可以用 b!! ,這會傳回一個非空的 b 或者抛出一個 b 為空的 NPE:
安全轉換:
普通的轉換可能産生 ClassCastException 異常。另一個選擇就是使用安全轉換,如果不成功就傳回空:
所有的異常類都是 Exception 的子類。使用方式與Java類似。
注解是一種将中繼資料附加到代碼中的方法。聲明注解需要在類前面使用 annotation 關鍵字:
用法:在多數情形中 @ 辨別是可選的。隻有在注解表達式或本地聲明中才必須
如果要給構造函數注解,就需要在構造函數聲明時添加 constructor 關鍵字,并且需要在前面添加注解:
注解可以有帶參數的構造函數:
注解也可以用在 Lambda 中。這将會應用到 lambda 生成的 invoke() 方法:
java 注解在 kotlin 中是完全相容的。
如果java 中的 value 參數有數組類型,則在 kotlin 中變成 vararg 參數:
注解執行個體的值在 kotlin 代碼中是暴露屬性。
得到運作時的類引用:
引用是一種 KClass類型的值。你可以使用<code>KClass.properties</code> 和<code>KClass.extensionProperties</code>擷取類和父類的所有屬性引用的清單。
函數引用
使用<code>::</code>操作符:
這裡<code>::isOdd</code>是是一個函數類型的值<code>(Int) -> Boolean</code>
下面是傳回一個由兩個傳遞進去的函數的組合。現在你可以把它用在可調用的引用上了:
屬性引用
通路頂級類的屬性,我們也可以使用<code>::</code>操作符:
<code>::x</code>表達式評估為<code>KProperty<Int></code>類型的屬性,它允許我們使用<code>get()</code>讀它的值或者使用名字取回它的屬性。
對于擴充屬性:
與 java 反射調用
想找到一個備用字段或者 java getter 方法:
構造函數引用
隻需要使用<code>::</code>操作符并加上類名。下面的函數是一個沒有參數并且傳回類型是<code>Foo</code>:
為了友善使用,<code>dynamic</code>應而生:
<code>dynamic</code>類型關閉了 kotlin 的類型檢查:
這樣的類型可以配置設定任意變量或者在任意的地方作為參數傳遞 任何值都可以配置設定為dynamic 類型,或者作為參數傳遞給任何接受 dynamic 類型參數的函數 這樣的類型不做 null 檢查
<code>dynamic</code>最奇特的特性就是可以在<code>dynamic</code>變量上調用任何屬性或任何方法。
動态調用可以傳回<code>dynamic</code>作為結果,是以我們可以輕松實作鍊式調用:
當給動态調用傳遞一個 lambda 表達式時,所有的參數預設都是<code>dynamic</code>:
參考:
<a href="http://kotlinlang.org/docs/reference/basic-syntax.html">http://kotlinlang.org/docs/reference/basic-syntax.html</a>
<a href="http://huanglizhuo.gitbooks.io/kotlin-in-chinese">http://huanglizhuo.gitbooks.io/kotlin-in-chinese</a>