JetBrains 發布Kotlin 1.0

jopen 8年前發布 | 20K 次閱讀 Kotlin

在Beta 之后僅僅幾個月,JetBrains 正式宣布 Kotlin 的第一個穩定版本 ,其基于JVM 并兼容Android的新語言。制造商表示,Kotlin 打算作為一個“好工具”,目的是為了驅動設計決策向實用性和互操作性前進。Kotlin 希望解決Java 中只能通過類庫和外部工具來修復的許多問題,同時提供平滑和漸進的過渡機會。

在2010年的初步設想中 ,JetBrains 決定創建Kotlin ,以此來提高開發他們自己的產品時(Kotlin 現在被使用在JetBrains 的產品中,比如IntelliJ IDEA)的生產效率。考慮到許多其他用戶將不得不面對同樣的問題,JetBrains 決定 開源Kotlin ,并且鼓勵參與和貢獻。因為它基于Java 1.6,Kotlin 很快在Android 開發者中流行起來,為他們提供了獲取一系列其他版本和語言所擁有的流行特性。事實上流行的證據就是新的Android 開發工具,比如JRebel for Android,包含了對Kotlin 的支持。

雖然Kotlin 在Android 開發中超越Java 的優勢會在Android 完成遷移到OpenJDK 之后減弱,但是開發者能夠在一些其他的領域獲得益處。其中包括:

  • Getter/Setter 引用:Java 中寫代碼來訪問屬性,典型的操作是通過IDE 輔助的代碼生成、像 Project Lombok 這樣的字節碼操作,或者是簡單的將內部屬性公開(這違背了封裝的原則)。在Kotlin 中, 數據類 的創建默認為所有的屬性提供了getter 和setter。
  • toString、hashCode、equals:Java 為這三個方法提供默認實現,但是這些很少有用處,這意味著開發者通常必須重寫默認方法并創建他們自己的。很多情況下,所需要的實現是足夠簡單的,以便于通過一些類庫,比如Apache Commons Lang 和Google Guava 來提供。Kotlin 的數據類基于類的字段為這些方法提供了一個默認實現,類似于大部分開發者所需要的,這意味著不需要去重寫這些方法。此外,Kotlin 的“==”操作符不是比較引用,而是和equals 方法一樣。
  • 對象的部分構建:在很多時候,一個對象需要在只有部分參數被提供,同時其他參數保持默認值的情況下被構建。這通常通過 建造者模式 來完成,它創建一個建造者類和目標類來創建需要的對象。Kotlin 通過支持命名參數來解決這個問題。
  • 空值檢查:對Java 開發者來說,避免空值是一個普遍頭疼的問題,通常通過IDE檢查(檢測值一直為空)、類里面的斷言( Objects.requireNotNull() )、類似@NotNull 或者@NonNull 這樣的注解的隱含驗證、Google 的Optional,或者之后的Java 8的Optional來解決。在Kotlin 中,空值的概念已經被轉移到語言自身,這意味著變量在編譯時就知道它們自己是否為空:
val x: String? = "Hi" // Declaring x as a nullable String
x.length // Does not compile, x could be null, null check needs to happen first

if (x != null) {
    x.length // Compiles, Kotlin understands that x is not null by this point
}

val y: String = null // Does not compile, y is not declared as nullable
  • 字符串構建:在Java 中,我們可以通過使用連接運算符("a " + 變量 + " b"),String.format() 方法能提供更好的可讀性(String.format("a %s b", 變量)),或者通過StringBuilder/StringBuffer,如果性能是一個問題(new StringBuilder().append("a ").append(variable).append(" b").build())來構建字符串。Kotlin 支持很多Ruby 和其他語言中的字符串插入的方法,意味著開發者能簡單的輸入“a ${變量} b”。
  • Java 8環境之前的Lambdas 表達式:Lambdas 表達式只在最新的Java 版本中引入,雖然舊版本不再支持,它們仍然被廣泛的使用。為了在之前的版本中使用Lambdas 表達式,用戶需要使用一些工具,比如 Retrolambda 。但是Kotlin 提供了lambda 表達式支持,因為它基于Java 6,它使得在舊環境中也能使用這個功能。

Kotlin 可以很容易的解決很多其他的日常問題。但是,盡管有很多好處,選用一種新語言會帶來它自己的風險和挑戰。一方面,在現有的項目中選用Kotlin,可能會需要Java 和 Kotlin 在一段時間內共存。JetBrains 試著讓兩者的 互通性 盡可能的透明來解決這個問題,同時提供一個Java-to-Kotlin 的轉換工具。

另一方面,用戶安全的投入到任何新工具中,都需要長期支持。JetBrains 已經通過分配大量的資源(超過20個全職開發者)和承若通過社區貢獻來進行標準化進程,來表明它對Kotlin 的承諾。JetBrains 也承諾Kotlin 的每個新版本都向后兼容。這些原則讓人們想起了Java 本身的管理方式,其參考的平臺是開源的(OpenJDK),標準化進程是社區領導的(JCP),并承諾每個新版本都向后兼容。

Kotlin 是否會在日益增長的JVM 語言(迄今為止超過50種)中突出出來還有待觀察;目前,GitHub 中已經有200萬行Kotlin 代碼(不包括JetBrains 項目), StackOverflow中也有將近700個問題

查看英文原文: JetBrains Releases Kotlin 1.0

 來自: http://www.infoq.com/cn/news/2016/03/jetbrains-kotlin-1

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!