-- 作者 謝恩銘 轉載請註明出處「程式設計師聯盟」ProgrammerLeague
原文 : www.jianshu.com/p/e04b252e7…
內容簡介
- 前言
- Kotlin的名字由來
- Kotlin是什麼
- Kotlin的優勢
- Kotlin學習資源
- 總結
- 第一部分第二課預告
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,是英語「科特林島」之意。這個小島屬於俄羅斯,我們用網際網路來搜尋一下,它是在下圖中紅色標記的位置:
科特林島位於俄羅斯的聖彼得堡以西約30公里處,形狀狹長,東西長度約14公里,南北寬度約2公里,面積有16平方公里,扼守俄國進入芬蘭灣的水道。
拉近點看更清楚:
聖彼得堡也就是以前的列寧格勒。
那麼 Kotlin 程式語言為什麼要選這個看似名不見經傳的小島來作為自己的名字呢?
這就不得不說說 Kotlin 語言的開發者 JetBrains 公司了。
提起大名鼎鼎的 JetBrains 公司,小編必須正襟危坐,甚至敲擊鍵盤的手指還會因為激動而略略顫抖(確定不是青年痴呆漸漸顯露的徵兆?):
作為軟體開發者,你應該聽說過 JetBrains 公司;而作為當前的 Android 開發者,如果你不知道 JetBrains 公司,那說明你應該沒用過 Google 的「親兒子」Android Studio。
我們可以去 JetBrains 的官網 www.jetbrains.com 瞧一瞧:
作為 Android 開發者,應該有些激動,因為我們看到了左下角的 IntelliJ IDEA 的圖示,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 的介紹:
看到上圖中那行「JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 」了嗎?
關於 IntelliJ IDEA 和 Android 之間的「恩怨情仇」,可以去官方的 IntelliJ IDEA 和 Android FAQ 看看。
接著,我們可以點選 JetBrains 主頁的 IDEs 那個選單進去看看,可以看到有 12 個 IDE :
上面的 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。
由此看來,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 上 github.com/JetBrains/k… 。
- 2016 年 2 月 :JetBrains 釋出了 Kotlin 1.0 版,算是比較穩定的正式版。許諾之後一直會保持向後相容。
- 2017 年目前最新版本 :1.1.2(2017 年 6 月)。相比 Kotlin 1.0 版本時,和 Kotlin 有關的程式碼數目從 210 萬行飛昇到 1000 多萬行。
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 少很多。
有一個網站 fabiomsr.github.io/from-java-t… 是對比 Java 和 Kotlin 的基本語法。在這個網站上可以看出 Kotlin 比 Java 精簡很多。 Kotlin 官網也有 Java 和 Kotlin 對比的頁面:kotlinlang.org/docs/refere… 。
我們來列舉一下 Kotlin 的主要優勢:
多平臺開發的可能 :基於 JVM 的開發,Android 開發,Web 開發,Native(原生)開發。其中 Web 開發可以結合 Spring 框架,而且 Kotlin 也可以編譯生成 JavasSript 模組,可以在一些 JavaScript 的虛擬機器上編譯。Native 開發就更牛了,目前 Kotlin 官方在 Github 開源了 Native 開發的原始碼 github.com/JetBrains/k… 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。官方也有專頁介紹:www.jetbrains.com/help/idea/2…安全 :大家聊得最多的肯定是可以輕鬆防止在 Java 中很常見的 NullPointerException(空指標異常)問題咯。做 Android 開發的一定深有體會,一般 app 奔潰,基本都是因為 NullPointerException,很多時候規避機制就是加一個 if 語句的判斷,很累贅。
容易學習 :Kotlin 語法很簡單,和主流語言類似,語法高效,入門非常容易。好比當初蘋果釋出 Swift 也是因為 OC 的語法奇怪,學習曲線比較陡峭。
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 的主要優勢:
當然了,Kotlin 的優勢肯定不止這些,篇幅關係我們不可能一一列舉。之後的課程中,會讓大家見識的。
正是因為 Kotlin 的這些優勢,才得到 Google 的垂青,新出任 Android 開發第一把交椅。現在 Android 還是很火的,國內貌似 iOS 開發的熱度稍微下降了些,但各大學習平臺 Android 的火爆程度還是很高,雖然要找個好的 Android 開發職位比以前難了。
現在 Android 和 Kotlin 一聯手,那傢伙,簡直是「AK47」啊。
說來有趣,目前 Kotlin 被 Google 宣佈為 Android 官方語言,而它和 Android 的競爭對手 -- 蘋果的 iOS 的官方語言 Swift 很像,有個網站 nilhcem.com/swift-is-li… 是專門對比 Kotlin 和 Swift 的語法的,很有趣。
很多大公司也早已開始用 Kotlin 了,例如 Pinterest,Netflix,Gradle,Uber(個人對 Uber 公司的企業文化比較反感),Trello :
有了這麼多大公司的支援,開源社群的維護,Kotlin 要再沒有明天那簡直「天理不容」啊。
5. Kotlin學習資源
中外 Kotlin 學習資源。
英語資源
Kotlin 官網:kotlinlang.org 永遠是最值得去的地方,最新的動態在官網,最權威的解釋也在官網。不過需要英語還過得去,因為裡面的文件和教程都是英語的。對於程式設計師,英語是很重要的。可以看我的這篇文章:對於程式設計師, 為什麼英語比數學更重要? 如何學習 。
Kotlin 官網的 Android 專頁 :kotlinlang.org/docs/refere…
Kotlin 官方文件 PDF 版 :kotlinlang.org/docs/kotlin… 方便大家下載下來離線檢視。
Kotlin 線上程式碼環境 :try.kotlinlang.org 有例子程式,在 Examples 裡。也包含了挑戰練習題,在 Kotlin Koans 裡。
Kotlin 挑戰練習題 :kotlinlang.org/docs/tutori… 。
Kotlin 的 Slack 社群 :kotlinlang.slack.com 。Slack 是一個聊天管理工具,可以方便加入各種 Channel 來聊天。我已經加入這個社群,Android 大牛 Jake Wharton 也在裡面聊天,你可以和他私聊。不過從國內訪問 Slack 速度貌似比較慢,而且容易被牆。說起來,剛過去的 2017 Google I/O 裡,Jake Wharton 也作為登場嘉賓對 Kotlin 做了很多介紹,大家不妨去 jakewharton.com/kotlin-is-h… 看看。
Stack Overflow 上 Kotlin 相關問題 :stackoverflow.com/questions/t… 。
Kotlin 官方論壇 :discuss.kotlinlang.org 。
Kotlin 官網整理的連結彙總 :kotlin.link 。
Kotlin 社群彙總:kotlinlang.org/community 。
中文資源
簡書的 Kotlin 專題 :www.jianshu.com/c/98aaef9f5…
知乎的 Kotlin 話題:www.zhihu.com/topic/20008…
Kotlin中文社群 :kotlin.cn 我註冊登陸了,但感覺這個網站還比較新,介面有待改進。
Kotlin 中國 :kotlintc.com 這個網站也還比較新。
Kotlin 中文網站 :www.kotlincn.net 中文頁面,不過內容沒有官網那麼全。而且中文翻譯也只做了一部分,很多連結還是會導到英文官網的相應頁面。他們的部落格 www.kotliner.cn 。
Kotlin 官方參考文件中文版 :www.gitbook.com/book/hltj/k… 。
稀土掘金的 Kotlin 資源頁 :juejin.im/post/591dd9… 。
Kotlin從入門到「放棄」系列視訊 :github.com/enbandari/K… 。
《Kotlin for Android developers》中文翻譯版 :uprogrammer.cn/kotlin-for-… 。
6. 總結
首先,如果你自學能力比較強,英語比較好,那完全可以根據上面提供的各種 Kotlin 資源著手學習了,都不用繼續看我的教程了。沒想到,我拆自己臺的功力還是蠻強的 :P
現在不少新的程式語言都挺類似的。新開發的語言更像是已有語言優秀特性集合的產物。Kotlin 和 蘋果 iOS 的官方語言 Swift 就挺像。
Kotlin 的未來應該是比較光明的,因為 Google 將其作為 Android 新的官方語言,又有 JetBrains 這樣大牌的軟體公司做後盾。
如果不是為了 Android 開發,那也可以學習一下 Kotlin,畢竟 Kotlin 也可以做其他事情。程式設計師要做到「一專多能」,精通一個領域,多接觸一些其他領域。比如目前 Python(人工智慧等領域的新貴)值得學習,Go 語言(被稱為 21 世紀的 C 語言,著名的 Docker 就是用 Go 語言開發的)也很不錯。即使不用來做開發也應該瞭解一下,緊跟 IT 潮流。
作為程式設計師,真的需要花點功夫把英語入門了。水平不用太高,有些不懂的詞可以用有道詞典、金山詞霸等查,但應該具備基本的英語理解能力,因為很多新語言的資源都是英語的,而中文翻譯的工作雖然有人做,但一方面需要時間,另一方面難以保證最新,更何況還難以保證翻譯的質量。英語好,你就比別人先行一步。
文中如有錯誤,歡迎指出,會更正,謝謝。
7. 第一部分第二課預告
通過這一課,應該說我們對 Kotlin 有了詳細的瞭解,也知道該從哪裡入手學習了。
下一課我們就來搭建 Kotlin 的 Android 開發環境,講解基本的 Kotlin 語法,並且用 Kotlin 來編寫我們的第一個 Android 應用吧。
微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:「向著標杆直跑」