簡體   English   中英

Scala類型系統的優點

[英]Advantages of Scala's type system

我正在探索Scala語言。 我經常聽到的一個主張是Scala具有比Java 更強大的類型系統。 通過這個我認為人們的意思是:

  • scalac拒絕某些錯誤的程序, javac會愉快地編譯,只會導致運行時錯誤。
  • 某些不變量可以在Scala程序中編碼,這樣編譯器就不會讓程序員編寫違反條件的代碼。

我這么認為是對的嗎?

Scala Type系統的主要優點不是更強大 ,而是更豐富 (參見“ Scala類型系統 ”)。
(Java可以定義其中的一些,並實現其他的,但Scala內置了它們)。
另見神話制造者1:Scala的“類型類型” ,評論Steve Yegge的博客文章 ,他將“Scala”視為“Frankenstein's Monster”,因為“有類型類型和類型類型”。

Java的主要安全問題與方差有關。 基本上,程序員可以使用不正確的方差聲明,這可能導致在Java中運行時拋出異常,而Scala不允許這樣做。

事實上,Java的Array是共變體這一事實已經成為一個問題,因為它允許生成錯誤的代碼。 例如,如sepp2k所示

String[] strings = {"foo"};
Object[] objects = strings;
objects[0] = new Object();

然后,當然,Java中有原始類型,它允許所有類型的東西。

此外,雖然Scala也有它,但是有鑄造。 Java API具有豐富的類型轉換,並且沒有類似Scala的case x: X => // x is now safely cast 當然,有一個案例使用instanceof來實現這一點,但沒有動力去做。 實際上,Scala的asInstanceOf是故意冗長的。

這些是使Scala的類型系統更強大的東西。 正如VonC所示,它也更加豐富。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM