轉自: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->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互操作。