-- 做者 謝恩銘 轉載請註明出處「程序員聯盟」ProgrammerLeague
原文 : www.jianshu.com/p/e04b252e7…html
隨着谷歌在 2017 年 5 月的 Google I/O 中宣佈 Kotlin 這門編程語言成爲 Android 新官方語言,近來掀起了一陣 Kotlin 學習熱潮。前端
做爲一個熱愛 Android 開發,有多年 Android 開發經驗的嵌入式軟件和 app 開發工程師,我也來寫一個 Kotlin 和 Android 的系列教程。java
但願這個教程能作到:android
- 方便你們查找資料
- 適當對比 Java 和 Kotlin 在開發 Android 應用時的不一樣
- 保持不斷更新,緊跟 Kotlin 官網的最新動向
- 聽取你們的建議來改進
好了,話休絮繁,咱們一塊兒探索吧!git
通常咱們介紹事物或人時,老是先從名字入手。好比有人也許會這樣自我介紹:「我叫小明,不是黃曉明的曉明。我爸媽當初爲何要給我起這個優(keng)秀(die)的名字呢?blablabla ... 」。程序員
咱們要認識 Kotlin,也能夠從它的名字開始。github
Kotlin 來源於一個島嶼的名字,全稱是 Kotlin Island,是英語「科特林島」之意。這個小島屬於俄羅斯,咱們用互聯網來搜索一下,它是在下圖中紅色標記的位置:編程
科特林島位於俄羅斯的聖彼得堡以西約30千米處,形狀狹長,東西長度約14千米,南北寬度約2千米,面積有16平方千米,扼守俄國進入芬蘭灣的水道。swift
拉近點看更清楚:後端
聖彼得堡也就是之前的列寧格勒。
那麼 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 開發第一語言,至關於「黃袍加身」,其命運當非其餘語言可比。
知道了名字的由來和背後的老大們,咱們進一步來認識一下 Kotlin 本人。
Kotlin 固然是一門編程語言,但它並非「新出爐的麪包」,從 2010 年就開始「烘焙」了。
說一點 Kotlin 的歷史:
Kotlin 是基於 JVM 的靜態類型編程語言,而 Java 也是基於 JVM 的編程語言,那麼 Kotlin 比 Java 究竟有哪些優點呢?
在 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 要再沒有明天那簡直「天理不容」啊。
中外 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-… 。
首先,若是你自學能力比較強,英語比較好,那徹底能夠根據上面提供的各類 Kotlin 資源着手學習了,都不用繼續看個人教程了。沒想到,我拆本身臺的功力仍是蠻強的 :P
如今很多新的編程語言都挺相似的。新開發的語言更像是已有語言優秀特性集合的產物。Kotlin 和 蘋果 iOS 的官方語言 Swift 就挺像。
Kotlin 的將來應該是比較光明的,由於 Google 將其做爲 Android 新的官方語言,又有 JetBrains 這樣大牌的軟件公司作後盾。
若是不是爲了 Android 開發,那也能夠學習一下 Kotlin,畢竟 Kotlin 也能夠作其餘事情。程序員要作到「一專多能」,精通一個領域,多接觸一些其餘領域。好比目前 Python(人工智能等領域的新貴)值得學習,Go 語言(被稱爲 21 世紀的 C 語言,著名的 Docker 就是用 Go 語言開發的)也很不錯。即便不用來作開發也應該瞭解一下,緊跟 IT 潮流。
做爲程序員,真的須要花點功夫把英語入門了。水平不用過高,有些不懂的詞能夠用有道詞典、金山詞霸等查,但應該具有基本的英語理解能力,由於不少新語言的資源都是英語的,而中文翻譯的工做雖然有人作,但一方面須要時間,另外一方面難以保證最新,更況且還難以保證翻譯的質量。英語好,你就比別人先行一步。
文中若有錯誤,歡迎指出,會更正,謝謝。
經過這一課,應該說咱們對 Kotlin 有了詳細的瞭解,也知道該從哪裏入手學習了。
下一課咱們就來搭建 Kotlin 的 Android 開發環境,講解基本的 Kotlin 語法,而且用 Kotlin 來編寫咱們的第一個 Android 應用吧。
微信公衆號「程序員聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟件工程師。
個人簡介熱愛生活,喜歡游泳,略懂烹飪。人生格言:「向着標杆直跑」