天天看點

Java 已老,Kotlin 或将取而代之?存在嗎?

Java 已老,Kotlin 或将取而代之?存在嗎?

近期小編看到這樣一篇文章 小編個人覺得Java不會衰落的 你們覺得呢?

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

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

Java 已老,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這條路上掙紮,也想在IT行業拿高薪,可以參加我們免費的公開課試聽學習 幹貨滿滿的,選擇最适合自己的課程學習,技術大牛親授,課程内容有:Java工程化、高性能及分布式、高性能、深入淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大資料等多個知識點。如果你想拿高薪的,想學習的,想就業前景好的,想跟别人競争能取得優勢的,想進阿裡面試但擔心面試不過的,你都可以來。

學習交流一群:468947140;二群:878249276

進群擷取往期Java進階架構資料、源碼、筆記、視訊

Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發等架構技術

繼續閱讀