VOOZH about

URL: https://read01.com/8nAPL3.html

⇱ Scala 相比於 Java 的優勢在哪裡? - 壹讀


Sunday, Apr 12, 2026

Scala 相比於 Java 的優勢在哪裡?

2015/05/12 來源:CSDN博客

個人覺得比較運行速度其實沒啥意義, 因為兩種語言都是生成 JVM 的字節碼, 依賴 JVM 這個虛擬平台來跑代碼. 除非 Scalac (scala的編譯器) 有重大 bug, 生成的字節碼執行讓人無法接受, 否則基本上不會相差太多. 再說, scala 都到大版本2了, 這種概率實在是不大.

相比較與 Java, 在下覺得 Scala 最主要的有以下兩點優勢:

FP 泛型支持

如果用多了 Spring 中大量的 template 接口, 你就會覺得 FP 其實還是蠻好用的.

而這僅僅是 FP 好處的冰山一角.

函數其實就是一個 input -> output (scala 也是這麼表示一個函數的), 沒有任何副作用, 與狀態無關, 由於這種特性, 所以函數式的編程範式在分布式領域有很多好處

對於函數式編程,我的知識實在是皮毛, 但可以這麼說, FP 相對與 OO 有哪些優勢, Scala 對於 Java 差不多就有哪些優勢.

正因為 FP 有如此多的優勢, 所以 Java8 才引入了 FP. 從某種程度上來說, Java 認可了 Scala 的做法.

類型系統支持

如果說 Java 是一種類型安全的語言, 那麼毫無疑問, Scala 的類型更加安全, 從某種程度上說, Scala 的類型是圖靈完備的, 而 Java 不是. 我的一位好朋友在這方面研究的比較深( ), 而我對與 Scala 的類型系統的理解, 也還是皮毛.

正是以上這兩點大優勢, 造成了 Scala 比 Java 更加安全, 同時又具備靈活性, 想像力.

其他語言層面上的優勢

在 Java 中, 你是否有時很想繼承多個 AbstractClass 呢? 對不起, Java 只支持單繼承

在 Scala 中, 你可以進行 mixin (Java 8 也開始引入 default method 了呢)在 Java 中, 想要一個 singleton ? 要麼在 static block 中做, 要麼利用 Enum 的單例特性完成, 或者其他更糾結的方法.

在 Scala 中, 只要聲明為 object在 Java 中, 想要延遲加載一個單例? double check

在 Scala 中, 只要在 object 中將變量修飾為 lazy 即可在 Java 中, 想要對集合進行一些操作? 使用一層一層的 for 循環吧

在 Scala 中, 使用 collection 的一些集合操作, 即可獲得如寫SQL般的享受.在 Java 中, 在並發中想對Future進行回調? 對不起, Future 不是 Listenable (無法支持回調), 除非你使用額外的工具(如 guava, spring)

在 Scala 中, 本來就主張異步編程, future 和 promise 的配合讓人非常愉快.

在 Java 中, 要透明擴展一個第三方庫的類怎麼辦? 包裝, 再加一層.

在 Scala 中, 有強大的 implicit 機制讓你更優雅的做到這一點, 同時還能保證類型安全(比起 Ruby 的 monkey patch, 要安全得多)

Scala 的表達力很強, 相同功能的代碼, 用 Java 和 Scala 的行數不可同日而語.

這些單單是語言層面上的優勢, 除此之外, Scala 還能無縫結合 Java

儘管羅列了如此多的好處, 但 Scala 有如下劣勢:

  • 語法複雜, 學習曲線非常高
  • 國內 Scala 程式設計師很難找 (目前 Scala 的影響力也在緩慢擴大, 比如 Scala 社區中的明星 Spark 的流行也在慢慢拉動 Scala 的流行, 如同 rails 之於 ruby)
  • 社區, 生態還比較小, Scala 風格的庫還非常少(但可以和 Java 很容易的斜街很多時候彌補了這一點)

對於程式設計師來說: Scala 很難學, 但值得學

對於企業來說: Scala 是過濾優秀(好學)程式設計師(Geek)的好濾斗.

最新文章 / 服務條款 / 私隱保護 / DMCA / 聯絡我們

壹讀/READ01.COM