前言
Android到現在已經發展了10年,從最初不怎麼厲害發展到現在,形成一個由成千上萬的App支撐,可以執行在包含手機、平板電腦、電視、汽車、手錶、無人機在內的幾乎所有智慧裝置中的完整生態系統,這一切足以讓Android的擁有者Google感到無比自豪。
不過有一件事一直讓Google「很不爽」,那就是開發Android App的核心語言Java並不屬於Google,而屬於Oracle。而且Oracle一直在和Google打關於Java的「官司」,儘管Google贏得了「官司」,但也讓Google清楚地看到,如果程式語言不掌握在自己的手裡,那麼總會受制於人,所以Google在數年時間裡進行多次嘗試,如推出Go語言。不過Go語言和C++類似,並不適合開發Android App。所以2017年5月之前,開發Android App的主要程式語言仍然是Java。
然而在2017年5月的I/O 大會上,Google突然宣佈,Kotlin成為開發Android的一級程式語言,這就表示,從這一刻開始,開發Android App可以使用兩種語言:Java和Kotlin。
那麼Kotlin是什麼呢?就在2017年5月的I/O大會之前,我也不太清楚這個世界上還有一種叫Kotlin的程式語言,相信大多數讀者和我一樣。其實與Kotlin類似的語言有很多,如Scala,它們都是以JVM為基礎的語言,也就是說,Kotlin和Scala一樣,都只提供了編譯器,沒有提供執行環境。執行Kotlin和Scala程式,需要將原始程式碼編譯成Byte Code,然後在JVM 上執行。
在剛開始接觸Kotlin時,我感到很奇怪,現在以JVM為基礎的語言非常多,舉例來說,撰寫了Spark的Scala語言,還有Groovy、JRuby、Clojure等,那麼Google為什麼獨偏愛Kotlin呢?隨著我對Kotlin的深入接觸,逐漸對Google選擇Kotlin的決定表示認可!
Kotlin作為第二種開發Android App的核心程式語言,一定是與Java有很大差異的,而且這種差異是要彌補Java的不足或增強Java的功能。所以要求都是正向的差異。
Java儘管歷史悠久,應用許多,但也有很多不足的地方,舉例來說,我們經常會遇到NullPointerException例外,這是個很討厭的例外,產生例外是因為存取了空白物件的成員。Kotlin巧妙地解決這個問題,讓存取空白物件的成員不再拋出例外,而是直接傳回NULL。Kotlin除了解決Java的遺留問題外,還加了很多「語法糖」,舉例來說,Kotlin支援擴充和運算符號多載,這是兩個非常大的「語法糖」。透過擴充,可以在沒有原始程式碼的情況下,為類別增加方法和屬性,透過運算符號多載,可以讓特定的類型支援原來沒有的操作,如為字串類型增加乘法和除法。總之,Kotlin單憑語言本身就比Java酷了不少。不過這些理由並不足以讓Google對Kotlin如此偏愛,因為其他同類語言,如Scala,也同樣增加了很多「語法糖」。
Kotlin還有什麼其他特性呢?其實Kotlin不僅可以在JVM上執行,還可以直接將Kotlin原始程式碼轉為JavaScript。這樣一來,從理論上講,Kotlin可以在任何支援JavaScript的環境中執行,如Web應用、React Native(Android和iOS)、微信公眾號、微信小程式、Node.js、Chrome外掛程式等。另外,還有一些地方是JavaScript做不到的,如開發本機應用。但Kotlin可以做到,Kotlin不僅可以產生JavaScript程式,還可以直接編譯成本地程式,如Windows的exe檔案、iOS App等,這樣一來,Kotlin幾乎可以開發所有類型的應用了。所以從理論上來講,Kotlin才是真正的跨平台語言,Kotlin可以直接或間接地開發各種類型的應用。
說了這麼多,相信大家一定已經清楚Kotlin的強大,以及Google為什麼選擇Kotlin的原因,當然,除了技術原因外,選擇Kotlin還有一個原因,就是Google的Android Studio是以IntelliJ IDEA為基礎的社區版本開發的,而JetBrains公司開發了IntelliJ IDEA和Kotlin。可以說Android Studio和Kotlin是師出同門,這樣它們之間更容易相容。
既然Kotlin這麼強大,而且選擇Kotlin的理由非常多,如開發效率高、語法優美、能跨平台開發、獲得Google的強力支援。我們還等什麼呢!趕緊透過本書將Kotlin的知識裝進我們的大腦才是正確的做法!
本書適合Kotlin同好學習、程式設計師閱讀,也可以作為大專院校和教育訓練學校的教材。
作者