Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

Kotlin 編程語言 程序員 Go語言 程序員聯盟 2017-06-22

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

-- 作者 謝恩銘 轉載請註明出處「程序員聯盟」ProgrammerLeague

原文 : http://www.jianshu.com/p/e04b252e71b8

內容簡介


  1. 前言

  2. Kotlin的名字由來

  3. Kotlin是什麼

  4. Kotlin的優勢

  5. Kotlin學習資源

  6. 總結

  7. 第一部分第二課預告

1. 前言


隨著谷歌在 2017 年 5 月的 Google I/O 中宣佈 Kotlin 這門編程語言成為 Android 新官方語言,近來掀起了一陣 Kotlin 學習熱潮。

作為一個熱愛 Android 開發,有多年 Android 開發經驗的嵌入式軟件和 app 開發工程師,我也來寫一個 Kotlin 和 Android 的系列教程。

希望這個教程能做到:

  • 方便大家查找資料

  • 適當對比 Java 和 Kotlin 在開發 Android 應用時的不同

  • 保持不斷更新,緊跟 Kotlin 官網的最新動向

  • 聽取大家的建議來改進

好了,話休絮繁,我們一起探索吧!

2. Kotlin的名字由來


一般我們介紹事物或人時,總是先從名字入手。比如有人也許會這樣自我介紹:「我叫小明,不是黃曉明的曉明。我爸媽當初為什麼要給我起這個優(keng)秀(die)的名字呢?blablabla ... 」。

我們要認識 Kotlin,也可以從它的名字開始。

Kotlin 來源於一個島嶼的名字,全稱是 Kotlin Island,是英語「科特林島」之意。這個小島屬於俄羅斯,我們用互聯網來搜索一下,它是在下圖中紅色標記的位置:

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

科特林島位於俄羅斯的聖彼得堡以西約30公里處,形狀狹長,東西長度約14公里,南北寬度約2公里,面積有16平方公里,扼守俄國進入芬蘭灣的水道。

拉近點看更清楚:

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

聖彼得堡也就是以前的列寧格勒。

那麼 Kotlin 編程語言為什麼要選這個看似名不見經傳的小島來作為自己的名字呢?

這就不得不說說 Kotlin 語言的開發者 JetBrains 公司了。

提起大名鼎鼎的 JetBrains 公司,小編必須正襟危坐,甚至敲擊鍵盤的手指還會因為激動而略略顫抖(確定不是青年痴呆漸漸顯露的徵兆?):

作為軟件開發者,你應該聽說過 JetBrains 公司;而作為當前的 Android 開發者,如果你不知道 JetBrains 公司,那說明你應該沒用過 Google 的「親兒子」Android Studio。

我們可以去 JetBrains 的官網 https://www.jetbrains.com 瞧一瞧:

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

作為 Android 開發者,應該有些激動,因為我們看到了左下角的 IntelliJ IDEA 的圖標。和 Android Studio 一樣,IntelliJ IDEA 也是一個 IDE(IDE 是 Integrated Development Environment,「集成開發環境」的意思),是一個強大的 Java 集成開發環境,安裝上 Android 的 Plugin(插件)後可以用來開發 Android 應用。

而 Google 推出的 Android 官方集成開發環境 Android Studio 就是基於 IntelliJ IDEA 。

這樣說也許不準確,應該說 Android Studio 和 IntelliJ IDEA 的 Android 插件 是從同一個源碼開始構建的。現在 Google 負責開發 Android Studio,等 Android Studio 發佈之後,IntelliJ IDEA 再把 Google 的插件拿去測試併發布。

或者說,Android Studio 純粹用於 Android 開發。IntelliJ IDEA 能做的事情比較多,但是不專精於 Android 開發。而且因為上面說到的順序問題,IntelliJ IDEA 的 Android 插件是會相對滯後於 Android Studio 的。因此做 Android 開發最好用 Android Studio。

目前 Android Studio 所用的 JVM(JVM 是 Java Virtual Machine 的縮寫,也就是「Java 虛擬機」的意思)是 JetBrains 公司的,見下圖 Android Studio 的介紹:

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

看到上圖中那行「JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 」了嗎?

關於 IntelliJ IDEA 和 Android 之間的「恩怨情仇」,可以去官方的 IntelliJ IDEA 和 Android FAQ 看看。

接著,我們可以點擊 JetBrains 主頁的 IDEs 那個菜單進去看看,可以看到有 12 個 IDE :

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

上面的 IDE 中,除了剛才介紹過的 IntelliJ IDEA,比較著名的有:

  • WebStorm :做網絡開發的朋友應該有用過,極為強大的 JavaScript 集成開發環境。被廣大中國 JS 開發者譽為「Web 前端開發神器」、「最強大的 HTML5 編輯器」、「最智能的 JavaScript IDE」等。我以前略微用過。

  • PyCharm :結合了 Django 框架的 Python 集成開發環境。我在工作中寫 Python 程序喜歡用 PyCharm。

  • PhpStorm :號稱「世界上最好的編程語言」PHP 的集成開發環境。

  • CLion :C 和 C++ 集成開發環境。

  • RubyMine :結合了 Ruby on Rails 框架的 Ruby 集成開發環境。

  • Gogland :Go 語言的集成開發環境。

感覺 JetBrains 出品的各個 IDE 長得都比較像。這些年 JetBrains 在 IT 界可謂是風生水起。幾乎可以說:「JetBrains 出品,必屬精品」。不禁聯想到當年「暴雪出品,必屬精品」的口碑。

再扯回 Kotlin 的名字由來(小編你還記得回來...)。原來,JetBrains 是來自捷克的公司,公司總部位於捷克首都布拉格,在俄羅斯的聖彼得堡和美國的波士頓都設有分公司。

Kotlin 的主要開發工作是由俄羅斯的聖彼得堡分公司的程序員團隊完成的。

他們說:Java 語言的名字是來自於一個島,那個島就是印度尼西亞的爪哇(Java)島,因盛產咖啡而聞名。所以 Kotlin 也得選一個島作為名字。

我們所見到的 Java 標誌,總是一杯熱咖啡。Java 語言的許多庫的類名稱,多與咖啡有關:如 JavaBeans(爪哇豆)、NetBeans(網絡豆)以及 ObjectBeans(對象豆)等等。bean 是英語「豆」的意思,咖啡豆就是 coffee bean。

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

由此看來,Kotlin 確實有取代 Java 的雄心。

當然了,許多語言都認為自己可以取代 Java。比如目前有 Scala、Fantom、Groovy、Gosu、和 Ceylon,而 Scala 和 Groovy 最為流行。

但 Kotlin 已經被 Google 欽點為 Android 開發第一語言,相當於「黃袍加身」,其命運當非其他語言可比。

3. Kotlin是什麼


知道了名字的由來和背後的老大們,我們進一步來認識一下 Kotlin 本人。

Kotlin 當然是一門編程語言,但它並不是「新出爐的麵包」,從 2010 年就開始「烘焙」了。

說一點 Kotlin 的歷史:

  • 2010 年 :JetBrains 著手開發 Kotlin。

  • 2011 年 7 月 :JetBrains 公開宣佈 Kotlin。

  • 2012 年 2 月 :JetBrains 在 Apache 2 許可證下開源了 Kotlin 的源碼。目前 Kotlin 的官方源代碼在 Github 上 https://github.com/JetBrains/kotlin 。

  • 2016 年 2 月 :JetBrains 發佈了 Kotlin 1.0 版,算是比較穩定的正式版。許諾之後一直會保持向後兼容。

  • 2017 年目前最新版本 :1.1.2(2017 年 6 月)。相比 Kotlin 1.0 版本時,和 Kotlin 有關的代碼數目從 210 萬行飛昇到 1000 多萬行。

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

Kotlin 是基於 JVM 的靜態類型編程語言,而 Java 也是基於 JVM 的編程語言,那麼 Kotlin 比 Java 究竟有哪些優勢呢?

4. Kotlin的優勢


在 Kotlin 之前,JetBrains 團隊一直使用 Java 來創建他們的 IDE。那為什麼他們要開發一門新的編程語言呢?

JetBrains 團隊之所以開發 Kotlin 這門新語言,是因為他們對已經存在的語言略有失望。這和 Go 語言的發明動機類似。

當時,Java 和其他語言都不能滿足 JetBrains 的需求,而 Scala 語言雖然不錯,但無奈編譯時間太長,於是 Kotlin 因運而生。

Kotlin 從不少語言獲得靈感,比如 Java、Scala、Groovy、C#、Gosu,可以說是博採眾長。既具備了快速開發的能力,編譯運行也快,實現相同功能的代碼長度可以比 Java 少很多。

有一個網站 https://fabiomsr.github.io/from-java-to-kotlin 是對比 Java 和 Kotlin 的基本語法。在這個網站上可以看出 Kotlin 比 Java 精簡很多。 Kotlin 官網也有 Java 和 Kotlin 對比的頁面:https://kotlinlang.org/docs/reference/comparison-to-java.html 。

我們來列舉一下 Kotlin 的主要優勢:

  • 多平臺開發的可能 :基於 JVM 的開發,Android 開發,Web 開發,Native(原生)開發。其中 Web 開發可以結合 Spring 框架,而且 Kotlin 也可以編譯生成 JavaSript 模塊,可以在一些 JavaScript 的虛擬機上編譯。Native 開發就更牛了,目前 Kotlin 官方在 Github 開源了 Native 開發的源碼 https://github.com/JetBrains/kotlin-native,基於 LLVM(Low Level Virtual Machine 的縮寫,表示「底層虛擬機」。LLVM 是一種編譯器基礎設施,以 C++ 寫成。它是為了任意一種編程語言而寫成的程序,利用虛擬技術創造出編譯時期、鏈接時期、運行時期以及閒置時期的最優化)的後端,方便為各個平臺編寫原生應用,比如為 Mac OS,iOS,Linux,嵌入式系統,等等。

  • 開源:閉源項目總歸比較有限。眾人拾柴火焰高,代碼開源可以更快速地發現 Bug,有了全世界各地程序員的貢獻,Kotlin 的優秀代碼和庫會越來越多。Linux 系統就是開源的很好例子。

  • 和 Java 100% 兼容 :Kotlin 調用 Java 已有的代碼或庫沒有問題。在一個項目中也可以同時用 Java 和 Kotlin 來編寫代碼。Android Studio 和 IntelliJ IDEA 都可以實現一鍵轉換 Java 代碼到 Kotlin。官方也有專頁介紹:https://www.jetbrains.com/help/idea/2017.1/mixing-java-and-kotlin-in-one-project.html

  • 安全 :大家聊得最多的肯定是可以輕鬆防止在 Java 中很常見的 NullPointerException(空指針異常)問題咯。做 Android 開發的一定深有體會,一般 app 奔潰,基本都是因為 NullPointerException,很多時候規避機制就是加一個 if 語句的判斷,很累贅。

  • 容易學習 :Kotlin 語法很簡單,和主流語言類似,語法高效,入門非常容易。好比當初蘋果發佈 Swift 也是因為 Objective-C 的語法奇怪,學習曲線比較陡峭。

  • Lambda 表達式。

  • 變量類型推斷。

  • when 語句塊 :告別繁瑣的 switch 和 if... else if... else 語句塊。

  • 非常方便的運算符重載。

  • 不再需要手動添加 get 和 set 方法對了,直接對類的私有變量賦值和取值。

  • Anko 這樣的 Kotlin 的官方庫可以使 Android 應用開發更快捷。

  • 函數/方法 的關鍵字是 fun,而不是 function。真的很簡潔也很有趣(fun 是英語「有趣」的意思)。

  • Var 和 Val 關鍵字 :和 fun 關鍵字類似,也很簡潔。Var 是 Variable(英語「可變的」之意)的縮寫,表示「可變的」變量。Val 大概是 Value (英語「值」之意)的縮寫,表示只能賦值,而不能改寫其值,是表示「只讀的」變量,有點類似 C 語言中的 const 變量。這兩個關鍵字的起名估計是參考了 Scala 語言。

  • 類的方法擴展很方便。

  • 可以創建自定義的 DSL(領域特定語言)。

  • 優秀工具的支持 :JetBrains 公司開發了那麼多優秀的工具,Kotlin 可以完全享用。

  • Coroutine :協程。

可以用下圖來大致總結 Kotlin 的主要優勢:

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

當然了,Kotlin 的優勢肯定不止這些,篇幅關係我們不可能一一列舉。之後的課程中,會讓大家見識的。

正是因為 Kotlin 的這些優勢,才得到 Google 的垂青,新出任 Android 開發第一把交椅。現在 Android 還是很火的,國內貌似 iOS 開發的熱度稍微下降了些,但各大學習平臺上 Android 的火爆程度還是很高,雖然要找個好的 Android 開發職位比以前難了。

現在 Android 和 Kotlin 一聯手,那傢伙,簡直是「AK47」啊。

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

說來有趣,目前 Kotlin 被 Google 宣佈為 Android 官方語言,而它和 Android 的競爭對手 -- 蘋果的 iOS 的官方語言 Swift 很像,有個網站 http://nilhcem.com/swift-is-like-kotlin 是專門對比 Kotlin 和 Swift 的語法的,很有趣。

很多大公司也早已開始用 Kotlin 了,例如 Pinterest,Netflix,Gradle,Uber(個人對 Uber 公司的企業文化比較反感),Trello :

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

有了這麼多大公司的支持,開源社區的維護,Kotlin 要再沒有明天那簡直「天理不容」啊。

5. Kotlin學習資源


中外 Kotlin 學習資源。

英語資源


  • Kotlin 官網:http://kotlinlang.org 永遠是最值得去的地方,最新的動態在官網,最權威的解釋也在官網。不過需要英語還過得去,因為裡面的文檔和教程都是英語的。對於程序員,英語是很重要的。可以看我的這篇文章:對於程序員, 為什麼英語比數學更重要? 如何學習 。

  • Kotlin 官網的 Android 專頁 :http://kotlinlang.org/docs/reference/android-overview.html

  • Kotlin 官方文檔 PDF 版 :https://kotlinlang.org/docs/kotlin-docs.pdf 方便大家下載下來離線查看。

  • Kotlin 在線代碼環境 :https://try.kotlinlang.org 有例子程序,在 Examples 裡。也包含了挑戰練習題,在 Kotlin Koans 裡。

  • Kotlin 挑戰練習題 :http://kotlinlang.org/docs/tutorials/koans.html 。

  • Kotlin 的 Slack 社區 :https://kotlinlang.slack.com 。Slack 是一個聊天管理工具,可以方便加入各種 Channel(頻道,群組)來聊天。我已經加入這個社區,Android 大牛 Jake Wharton 也在裡面聊天,你可以和他私聊。不過從國內訪問 Slack 速度貌似比較慢,而且容易被牆。說起來,剛過去的 2017 Google I/O 裡,Jake Wharton 也作為登場嘉賓對 Kotlin 做了很多介紹,大家不妨去 http://jakewharton.com/kotlin-is-here 看看。

  • Stack Overflow 上 Kotlin 相關問題 :https://stackoverflow.com/questions/tagged/kotlin 。

  • Kotlin 官方論壇 :https://discuss.kotlinlang.org 。

  • Kotlin 官網整理的鏈接彙總 :https://kotlin.link 。

  • Kotlin 社區彙總:https://kotlinlang.org/community 。

Android遇上Kotlin|第一部分第一課 : Kotlin若只如初見

中文資源


  • 簡書的 Kotlin 專題 :http://www.jianshu.com/c/98aaef9f5d2f

  • 知乎的 Kotlin 話題:https://www.zhihu.com/topic/20008824/hot

  • Kotlin 中文社區 :http://kotlin.cn 我註冊登陸了,感覺這個網站還比較新。

  • Kotlin 中國 :https://kotlintc.com 這個網站也還比較新。

  • Kotlin 中文網站 :https://www.kotlincn.net 中文頁面,不過內容沒有官網那麼全。而且中文翻譯也只做了一部分,很多鏈接還是會導到英文官網的相應頁面。他們的博客是 http://www.kotliner.cn 。

  • Kotlin 官方參考文檔中文版 :https://www.gitbook.com/book/hltj/kotlin-reference-chinese 。

  • 稀土掘金的 Kotlin 資源頁 :https://juejin.im/post/591dd9f544d904006c9fbb96 。

  • Kotlin 從入門到「放棄」系列視頻 :https://github.com/enbandari/Kotlin-Tutorials 。

  • 《Kotlin for Android developers》中文翻譯版 :http://uprogrammer.cn/kotlin-for-android-developers-zh 。

6. 總結


  1. 首先,如果你自學能力比較強,英語比較好,那完全可以根據上面提供的各種 Kotlin 資源著手學習了,都不用繼續看我的教程了。沒想到,我拆自己臺的功力還是蠻強的 :P

  2. 現在不少新的編程語言都挺類似的。新開發的語言更像是已有語言優秀特性集合的產物。Kotlin 和 蘋果 iOS 的官方語言 Swift 就挺像。

  3. Kotlin 的未來應該是比較光明的,因為 Google 將其作為 Android 新的官方語言,又有 JetBrains 這樣大牌的軟件公司做後盾,而且還有那麼多大公司在使用,開源社區在維護。

  4. 如果不是為了 Android 開發,那也可以學習一下 Kotlin,畢竟 Kotlin 也能做其他事情。程序員要做到「一專多能」,精通一個領域,多接觸其他領域。比如目前 Python(人工智能等領域的新貴)值得學習,Go 語言(被稱為 21 世紀的 C 語言,著名的 Docker 就是用 Go 語言開發的)也很不錯。即使不用來做開發也應該瞭解一下,緊跟 IT 潮流。

  5. 作為程序員,真的需要花點功夫把英語入門了。水平不用太高,有些不懂的詞可以用有道詞典、金山詞霸等查,但應該具備基本的英語理解能力,因為很多新語言的資源都是英語的,而中文翻譯的工作雖然有人做,但一方面需要時間,另一方面難以保證最新,更何況還難以保證翻譯的質量。英語好,你就比別人先行一步。

文中如有錯誤,歡迎指出,會更正,謝謝。

7. 第一部分第二課預告


通過這一課,應該說我們對 Kotlin 有了詳細的瞭解,也知道該從哪裡入手學習了。

下一課我們就來搭建 Kotlin 的 Android 開發環境,講解基本的 Kotlin 語法,並且用 Kotlin 來編寫我們的第一個 Android 應用吧。

微信公眾號「程序員聯盟」ProgrammerLeague

我是[謝恩銘](http://www.jianshu.com/u/44339a8a9afa),在巴黎奮鬥的軟件工程師。

[我的簡介](http://www.jianshu.com/p/e1c5835fee7d)

熱愛生活,喜歡游泳,略懂烹飪。

人生格言:「向著標杆直跑」

相關推薦

推薦中...