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

w39發表於2021-09-09

近期小編看到這樣一篇文章 小編個人覺得Java還是依舊火爆 你們覺得呢?

把你們的想法在在下面評論席上發表出來 小編會一個一個看的

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
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/854/viewspace-2804204/,如需轉載,請註明出處,否則將追究法律責任。

相關文章