1. 程式人生 > >Kotlin 教程(一):走進 Kotlin 的世界

Kotlin 教程(一):走進 Kotlin 的世界

今年 Google I/O 大會上,官方扶正 Kotlin 的舉動火遍整個 Android 開發圈。不過,有些開發者似乎過度解讀 Google 的意圖,認為 Kotlin 要取代 Java 成為 Android 開發的標配,大會上說的是 official support kotlin,並非 replace java with kotlin。以至於後來回公司上班,後臺童鞋打招呼的時候還問,聽說你們 Android 以後不用 Java 要用 Kotlin 寫(那位後臺童鞋之前用 Kotlin 寫過伺服器程式碼)。好吧,我本人是不支援官方一支援 Kotlin 後,就說 Java 辣雞,Kotlin 才是王道這類說法。畢竟,語言終究有自己的優缺點,既然官方開始支援了,我們不妨利用一些空餘時間學習一下 Kotlin 好了。

Kotlin 簡介

Kotlin 是 JetBrains 推出專案,是一種在 Java 虛擬機器上執行的靜態型別程式語言,也可以被編譯成為 JavaScript 原始碼。在 2011 年 7 月推出之前,它已被開發一年之久。直到 2016 年 2 月 15 日,官方釋出了第一個穩定的 release 版本 —— Kotlin v1.0。從 Kotlin 官網介紹來看,這近乎是一門野心勃勃的語言。

  • 基於 JVM 程式設計,這意味著 Kotlin 可以寫伺服器程式碼;
  • 基於 Android 和 Browser 程式設計,這意味著不僅可以寫客戶端程式設計,連前端開發都可以;
  • 基於 Native 程式設計,直接繞過 JVM 與底層程式碼打交道,好彪悍;

不過 Kotlin-Native 專案還在開發階段,不知道最終推出的專案如何,還是蠻期待的,感興趣的朋友可以關注它的 Github 更新:

Kotlin 與 Android

我在 2015 年的時候就開始留意到 Kotlin 這門語言(當然僅僅是留意,並未深入瞭解過),因為偶爾逛 Github 的時候會看到一些 Kotlin 編寫的 Android 開源專案,直到 2016 年 12 月底的時候,又發現了 Github 的 Trending 榜上居然有 Kotlin 一項。

感到驚訝之餘,也說明了越來越多的開發者在 Github 上提交 Kotlin 專案程式碼。這也意味著如果我們想要用 Kotlin 開發 Android 專案,可以從 Github 上獲取到很多開源專案支援,如:

環境搭建

開發環境上,需要先安裝 Apache Ant(1.9.4 或更高版本)和 JDK(1.6, 1.7 and 1.8)。然後再安裝開發的 IDE,關於 Kotlin 開發的 IDE 有很多,如:

  • Android Studio:2.x 版本需要安裝 Kotlin 外掛支援,3.0 開始預設支援編寫 Kotlin 程式碼,無需外掛。
  • Eclipse:通過 Help -> Eclipse Marketplace 搜尋 Kotlin 外掛安裝。

小到記事本同樣可以編寫 Kotlin 程式碼(這句簡直是廢話)。

Kotlin 語法特點

  • Kotlin 與 Java 語法並不相容,但可以和 Java 程式碼相互運作(混合編譯)。跑一個最簡單的混編 Demo,用 Java 程式碼建立一個 MainActivity,再用 Kotlin 編寫一個 Lesson0Activity,從 MainActivity 呼叫 startActivity 進入 Lesson0Activity。
  • 程式碼精簡,相同的功能,比 Java 實現的程式碼量少。如你要建立一個 Entity 類,除了宣告屬性外你還要建立對應的 get、set 方法,分別來看看 Java 和 Kotlin 是怎麼做,Kotlin 程式碼就一行搞定。

獲取 Entity 中的屬性值,這裡不要認為跟 Java 中把屬性宣告成為 public 一樣(後面的文章再詳細說明)。

關於程式碼精簡的特點還有很多例子,不一一贅述。

  • 程式碼語句不需要;作為結束,這點和 Python 一致。(加了分號也不會報錯)
  • 使用 var 宣告變數,用 val 宣告常量,用 fun 宣告函式。
  • 繼承父類和介面無需 extends、implements,只需:。
  • 支援 lambda 表示式。在 Java8 前,我們要傳入一個介面是這樣的。

Java8 有了 Lambda 表示式後是下面這樣的。

而 Kotlin 支援 Lambda 可以寫成這樣,對比 Java 版的 setOnClickListener 大家可以看得出區別。

  • 空指標檢測。NullPointerException(也稱 NPE)是開發過程中最常遇到的 Exception 之一了,為此我們不得不寫很多防禦性程式碼去判斷一個物件是否為 null。而 Kotlin 預設是不需要變數為 null 的,否則在編譯的時候就會報錯。

要想程式正常執行,你就需要改成下面這樣的程式碼。

關於 Kotlin 的 NPE 處理,還有很多有意思的地方,同樣以後再細說。

  • 資料型別自動推斷,建立物件無需 new。

關於 Kotlin 的特點暫時寫到這裡,我也是一邊學習一邊寫文章記錄,後面說不定還得看到更多亮點。

執行 Kotlin 程式碼

簡單瞭解完 Kotlin 後,最後從 IDE 上跑一下程式碼來結束本文,下面分別從 IntelliJ IDEA 和 Android Studio 環境下分別執行一下程式碼。

安裝 IntelliJ IDEA 後,建立一個基於 JVM 開發的 Kotlin Project。

然後再 src 目錄下建立一個 Kotlin Class

寫一段最簡單的入門程式碼,點選執行即可看到控制檯有輸出結果,以及生成相應的位元組碼檔案。

在 Android Studio 2.x 的環境下執行 Kotlin 程式碼需要先安裝前面提到的 Kotlin 外掛,安裝完後重啟 AS,你就可以在對應的包下建立 Kotlin 的類檔案以及 Activity 等。

建立完 Kotlin 類後,會彈出下面的彈窗配置相應的 Kotlin 依賴。

這樣就會在你的 AS Project 以及對應的 Module 下出現如下配置。

這樣你就可以在 AS 愉快的跑起 Kotlin 程式碼了。

總結

好了,關於 Kotlin 教程的第一篇就到這裡,文章也是自己的學習筆記,如果有錯誤疏漏,歡迎留言指點。

參考文獻