天天看點

【轉】Android世界的Swift - Kotlin語言

最近Oracle又在和Google撕的厲害,才知道還有這麼Kotlin在Android像Swift在Mac的地位一說。

Kotlin是一門與Swift類似的靜态類型JVM語言,由JetBrains設計開發并開源。與Java相比,Kotlin的文法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函數、操作符重載、字元串模闆。它與Java高度可互操作,可以同時用在一個項目中。

按照JetBrains的說法,根據他們多年的Java平台開發經驗,他們認為Java程式設計語言有一定的局限性和問題,而且由于需要向後相容,它們不可能或很難得到解決。是以,他們建立了Kotlin項目,主要目标是:

建立一種相容Java的語言

編譯速度至少同Java一樣快

比Java更安全

比Java更簡潔

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

Ashraff Hathibelagal是一名喜歡研究新架構和SDK的獨立開發者。近日,他撰文介紹了Kotlin的一些文法。按照他的說法,一個合格的Java程式員可以在很短的時間内學會使用Kotlin。

類與構造函數

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

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

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

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

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

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

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

必須使用:代替Java中的extends關鍵字

基類頭必須有open注解

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

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

函數與擴充

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

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

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

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

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

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

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

範圍表達式

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

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

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

條件結構

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

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

循環結構

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

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

字元串模闆

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

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

上面介紹的隻是Kotlin的一些基本文法和特性,更多細節請查閱官方文檔。事實上,到目前為止,Kotlin還仍然隻是一個預覽版本,接下來的幾個月中還會有多項重大改進及新增特性。盡管如此,GitHub上已有400多個與Kotlin項目相關的庫。

在另外一篇文章中,Hathibelagal寫道,“如果你正在為Android開發尋找一種替代程式設計語言,那麼應該試下Kotlin。它很容易在Android項目中替代Java或者同Java一起使用。”想要了解如何在Android Studio中使用Kotlin開發Android項目的讀者,可以讀下這篇文章。

繼續閱讀