天天看點

Kotlin:Android世界的Swift

轉自:http://www.infoq.com/cn/news/2015/06/Android-JVM-JetBrains-Kotlin

建立一種相容Java的語言

編譯速度至少同Java一樣快

比Java更安全

比Java更簡潔

比最成熟的競争者Scala還簡單

類與構造函數

Kotlin建立類的方式與Java類似,比如下面的代碼建立了一個有三個屬性的<code>Person</code>類:

可以看到,Kotlin的變量聲明方式略有些不同。在Kotline中,聲明變量必須使用關鍵字<code>var</code>,而如果要建立一個隻讀/隻指派一次的變量,則需要使用<code>val</code>代替它。另外,為了實作“空安全(null safety)”,Kotlin對可以為空的變量和不可以為空的變量作了區分。在上述代碼中,變量<code>name</code>和<code>age</code>不可為空,而<code>?</code>表明變量<code>college</code>可以為空。定義完類之後,建立執行個體就非常簡單了:

注意,Kotlin沒有關鍵字<code>new</code>。執行個體建立完成後,就可以像在Java中一樣為變量指派了:

變量可以采用上述方式指派,也可以通過構造函數指派,但後者是一種更好的編碼實踐。在Kotlin中,建立這樣的一個構造函數非常簡單:

而實際上,由于構造函數中沒有其它操作,是以花括号也可以省略,代碼變得相當簡潔:

上述代碼中的構造函數是類頭的一部分,稱為主構造函數。在Kotlin中,還可以使用<code>constructor</code>關鍵字建立輔助構造函數,例如,下面的代碼增加了一個輔助構造函數初始化變量<code>email</code>:

Kotlin允許建立派生類,但要遵循如下規則:

必須使用<code>:</code>代替Java中的<code>extends</code>關鍵字

基類頭必須有<code>open</code>注解

基類必須有一個帶參數的構造函數,派生類要在它自己的頭中初始化那些參數

比如下面的代碼建立了一個名為<code>Empoyee</code>的派生類:

函數與擴充

有派生就有重載。與類的派生一樣,允許重載的方法要有<code>open</code>注解,而在派生類中重載時要使用<code>override</code>注解。例如,下面是在<code>Employee</code>類中重載<code>Person</code>類的<code>isEligibleToVote</code>方法的代碼:

除了改變類的已有行為,Kotlin還允許開發者在不修改類的原始定義的情況下實作對類的擴充,如下面的代碼為<code>Person</code>類增加了一個名為<code>isTeenager</code>的擴充:

在需要擴充來自其它項目的類時,這個特性特别有用。

上面提到的函數都與Java中的函數類似,但Kotlin還支援其它類型的函數。如果一個函數傳回單個表達式的值,那麼可以使用<code>=</code>來定義函數。下面是一個建立單表達式函數的例子:

Kotlin還支援高階函數和Lambda表達式。例如,lambda表達式<code>{x,y-&gt;x+y}</code>可以像下面這樣給一個變量指派:

而下面的高階函數将上述表達式作為一個參數,并将表達式的計算結果翻倍:

該函數可以使用下面的其中一種方式調用:

範圍表達式

在Kotlin中,範圍表達式用的比較多。範圍建立隻需要<code>..</code>操作符,例如:

如果建立一個降序範圍,則需要使用<code>downTo</code>函數,例如:

如果步長不是1,則需要使用<code>step</code>函數,例如:

條件結構

在Kotlin中,if是一個表達式,根據條件是否滿足傳回不同的值,例如,下面的代碼将<code>isEligibleToVote</code>設定為“Yes”

<code>when</code>表達式相當于Java的<code>switch</code>,但功能更強大,例如,下面的代碼将<code>typeOfPerson</code>設定為“Teenager”:

循環結構

Kotlin使用<code>for..in</code>周遊數組、集合及其它提供了疊代器的資料結構,文法同Java幾乎完全相同,隻是用<code>in</code>操作符取代了<code>:</code>操作符,例如,下面的代碼将周遊一個<code>String</code>對象數組:

<code>while</code>和<code>do..while</code>循環的文法與Java完全相同。

字元串模闆

Kotlin允許在字元串中嵌入變量和表達式,例如:

此外,Kotlin與Java高度可互操作。Kotlin可以用一種自然的方式調用現有的Java代碼,而Java也很容易調用Kotlin代碼。同時,Kotlin也可以與JavaScript互操作。

繼續閱讀