Java 已老,Kotlin 或將取而代之?
近期小編看到這樣一篇文章 小編個人覺得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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [Kotlin基礎] Java 呼叫 Kotlin(一)KotlinJava
- 從 Java 到 Kotlin - 介紹 KotlinJavaKotlin
- Kotlin Multiplatform Mobile已邁入AlphaKotlinPlatform
- [譯] 將 Kotlin 應用於現有 Java 程式碼的策略KotlinJava
- ASP已老,尚能飯否?
- Kotlin 與 Java 對比KotlinJava
- 從Java到Kotlin(八)JavaKotlin
- FROM JAVA BUILDERS TO KOTLIN DSLSJavaUIKotlin
- 從Java到Kotlin(七)JavaKotlin
- Java17+Tomcat9將不再需要tomcat-native或APR!JavaTomcat
- 微軟稱win10系統將棄用截圖工具:由螢幕捕捉應用取而代之微軟Win10
- java呼叫kotlin注意事項JavaKotlin
- spring boot kotlin java 混編Spring BootKotlinJava
- Kotlin & Java 之單利模式KotlinJava模式
- 用Java optional模仿Kotlin? - WelshJavaKotlin
- Kotlin 與 JAVA 不同之處KotlinJava
- 從Java到Kotlin,然後又回到Java!JavaKotlin
- Java中"與"、"或"、"非"、"異或"Java
- Google 跨裝置作業系統Fuchsia或將支援 Java,Android將何去何從?Go作業系統JavaAndroid
- Kotlin 2版本即將釋出Kotlin
- Kotlin與java的糾纏史KotlinJava
- 從Java角度深入理解KotlinJavaKotlin
- Kotlin for Java Developers 學習筆記KotlinJavaDeveloper筆記
- android-ktx 已釋出,你還沒有用過 Kotlin?AndroidKotlin
- ☕【Java實戰系列】「技術盲區」Double與Float的坑與解決辦法以及BigDecimal的取而代之!JavaDecimal
- kotlin中將回撥改寫為協程Kotlin
- kotlin和java混合開發總結KotlinJava
- Kotlin和Java的簡單對比KotlinJava
- Java2Kotlin轉換自查表JavaKotlin
- JAVA 老鳥求兼職Java
- 谷歌將在 Kotlin 中支援 Protocol Buffers 資料格式谷歌KotlinProtocol
- SQL 已死,但 SQL 將永存!SQL
- Java社群對Kotlin有什麼看法? - redditJavaKotlin
- Java 入坑 Kotlin 必看 —— 類、物件和介面JavaKotlin物件
- 完整的 java/kotlin 生成 echarts 圖片方法JavaKotlinEcharts
- 開發Android應用用Kotlin還是Java?AndroidKotlinJava
- Kotlin 1.4 現已釋出,專注於質量和效能(轉)Kotlin
- 育碧或將推出訂閱服務