1. 程式人生 > >Java 已老,Kotlin 或將取而代之!

Java 已老,Kotlin 或將取而代之!

重載方法 可讀性 ++ 局部變量 核心 即使 返回 之間 roo

Java已經成為歷史。它無法發展成現代語言,同時保證向後兼容性。但它為我們帶來了最好的JVM生態系統,並引導了許多優秀語言的誕生,如Groovy、Scala、Clojure、Kotlin等。

技術分享圖片

▌歡迎年紀最小的Kotlin!

Kotlin誕生於2011年,但在去年Google宣布Kotlin成為安卓的官方開發語言之後迅速走紅。Kotlin從其他JVM語言中借鑒了大量強大的功能。我們來快速瀏覽一下Kotlin能為Java開發者帶來的好處。

無需再擔心NPE
Java程序員都討厭運行時出現空指針異常(Null Pointer Exception,簡稱NPE)。Kotlin提供了最好的支持,從而在編譯時避免空引用。默認情況下,所有對象都不能為空,如果想定義可空的類型,就必須使用 ? 操作符。訪問可空的對象時,編譯器會強行要求使用安全調用操作符 ?.。還可以用Elvis操作符 ?: 來賦默認值。

無需提供顯式類型聲明
Kotlin能夠自動推斷類型,因此無需顯式聲明。只需使用val 就可以定義final變量,用var定義普通變量。註意只有聲明和賦值出現在同一條語句時才能推斷類型。

避免復雜的字符串格式化
Kotlin允許使用字符串模板來簡化字符串格式化。$可以用來引用變量,復雜的表達式可以用 ${}。

創建簡單的POJO無需使用樣板代碼
Kotlin提供了data類,用來定義僅僅用來保存數據的對象。Kotlin會為data類自動生成equals、hashCode、toString、copy、getter和getter(針對用var定義的屬性)方法。還可以對data類使用對象解構,將對象屬性保存到變量中。

可以避免Builder類和冗余的方法重載
Kotlin支持方法的命名參數,因此在大多數情況下無需再創建Builder類。此外,Kotlin還支持默認方法參數,因此無需再為傳遞默認值而重載方法。

靜態初始化集合無需再使用guava庫

Kotlin提供了簡單直接的方法,利用listOf、mapOf、setOf方法在行內初始化集合。Map的初始化還支持直觀的key to value語法。它還支持Map的解構,以方便叠代。

創建Singleton不再復雜
Kotlin的object聲明只需一行代碼就能創建Singleton。

無需使用不必要的局部變量
在Kotlin中,try、when等結構其實是帶有返回值的表達式。例如,可以將try的結果賦給變量,這樣就無需再創建局部變量了。類似地,when也可以當做表達式使用。when相當於Java的switch,但要強大得多。

可以避免類強制轉換的異常
Kotlin提供了is操作符(相當於Java的instanceOf)以檢查對象是否為指定的類型。使用is運算符會自動進行類型轉換。這樣就能避免由於錯誤的類型轉換導致的異常。

同一個對象內的調用序列中,無需再重復類型名
Kotlin提供了with結構以方便反復調用同一個對象的方法,這樣就無需每次都指明變量名。Java通常采用builder模式和方法鏈來實現這一點。但在Kotlin中更簡單,甚至對於非builder類也一樣。

Kotlin還提供了apply這個擴展函數,能夠實現相同的功能。

Delegation或decorator模式無須再使用樣板代碼
為了使用組合代替繼承,我們通常采用delegation或decorator模式,但wrapper類必須重復被代理的類的每個方法。Kotlin中能夠通過by操作符來簡化delegation模式。它將自動實現必要的方法來調用被代理的類。當然,必要的時候仍然可以重載特定的方法。

創建靜態函數無需再使用類
Kotlin支持類之外的函數,因此創建靜態工具函數無需再創建類。

在lambda中修改非final的變量無需再使用hack
Java支持lambda的方式是將其自動替換成匿名類,但這樣就無法在lambda中改修非final的變量了。但在Kotlin中你能直接修改lambda中的非final變量。

延遲加載不再困難
Kotlin提供了非常簡單的方法,只需指定lazy關鍵字,就可以推遲屬性的初始化。

不需要完全切換到新語言
Kotlin能與Java無縫結合,因此與舊Java代碼的集成十分方便。你可以繼續使用第三方Java庫和框架。與Scala不同,Kotlin沒有自己的集合庫,它只是擴展了JDK的集合。因此在Java和Kotlin的集合類型之間轉換無需使用膠水代碼。

代碼更緊湊,更易讀
Kotlin采用方法名慣例重載了許多操作符,以增加代碼的可讀性。例如,方法plus用來重載 + 運算符,minus重載 - 運算符,times重載 * 運算符,div 重載 / 運算符,等等。它還支持更多的運算符重載,如%、+=、+-、++、-- 等。

Kotlin使用 .. 運算符定義範圍,使代碼更緊湊。它還提供了until關鍵字以去除邊界,step操作符以跳過項目。in操作符用來檢查範圍。還可以通過實現rangeTo和contains方法來重載 .. 和 in 運算符。

擴展現有的JDK類很容易
Kotlin可以通過非常簡單的方式給現有的類增加擴展函數。這是個很強大的功能,利用它可以輕松擴展語言的核心API。

▌為什麽應該使用Kotlin?

可以將生產力提高許多倍:

它是靜態類型語言,因此編譯時就能捕獲許多bug;
工具支持完善,畢竟是寫IDE的公司出品的語言;
由JetBrains這個IDE公司創建,他們很關心開發者的生產力;
能避免Java開發者的許多日常的煩惱。
可以獲得許多最佳實踐:

所有類都是final;
集合是immutable的;
通過必須的關鍵字實現重載,而不是可選的註解;
沒有必須處理的異常(checked exception);
沒有原始(Raw)類型;
對泛型的支持更簡潔。
非JVM的支持:

Kotlin還可以編譯成JavaScript用於前端開發;
Kotlin還可以在其他原生運行時上執行,因此無需JVM即可運行。
▌開發者應該轉換到Kotlin嗎?

Kotlin很不錯,但還不完美,距離完美的語言還需要一些實踐。它背後是JetBrains和Google,因此可以相信它只會越來越好。

如果你是安卓開發者,那麽應該立刻使用Kotlin。

如果是Java開發者,那麽還應該考慮下其他因素,如團隊成員、公司的接受程度等。但即使不能立即使用,也應該看看Kotlin這個現代語言的美。

而且,根據ThoughtWorks的技術報告解讀,公司可以在風險可控的項目中嘗試使用Kotlin。

喜歡小編輕輕點個關註吧!

Java 已老,Kotlin 或將取而代之!