Javaでチェックされた例外は、それほど悪いことではありません。もちろん、ADTはScalaのより良いオプションかもしれませんが、Javaでは、チェック例外が代わりに使用され、整頓されたコード引数は、ブログが何度繰り返されても無意味です。基本的には、システムで発生する可能性のある深刻で修復可能な状態を喜んで無視する必要があると言われています。ネジ式システム、きれいなコードにより、システムが自動的に堅牢になります。このような推論は、なぜ多くのJavaコーダーが自発的にコードをXMLに移動するのかを説明します(Spring、Mavenなど。ここでかなりの部分を見逃しています)。
http://www.scala-lang.org/old/node/8787.htmlの下のM. Oderskyによって与えられたScalaでチェック例外が欠如している理由は、驚くほど異なっており、理にかなっています。
チェック例外の問題は、リストのmapメソッドによって最もよく実証されます。
def map[B](f: A => B): List[B]
@throwsでマップに注釈を付ける方法は?mapが@throwsアノテーション自体を取得しない場合、おそらく@throwsを持つ関数を渡すことはできません。これにより、マップの使用方法に関する面倒な制限と区別が導入されます。関数の引数がスローするすべての例外をマップがスローすることをなんとか述べることができれば、事態は改善されるでしょう。これを表現できるエフェクトシステムはいくつかありますが、これまでのところ、私が見た表記はすべて重すぎます。
Lukas Rytzは、マップのタイプやその他の一般的な機能を簡潔かつ正確に表現するために使用できる軽量のエフェクトシステムに関する研究を行っています。それは研究であるため、現時点では、どの程度成功するか、どれだけScalaに投入できるかは不明です。理想的には、ある時点でオプションの型システムとして追加できるようになります。しかし、具体的な予測をするのは時期尚早です。
乾杯
確かではありませんが、Java 8ラムダも未チェックの例外に制限されていると思います。JDK 8(java.util.function.*
)のほとんどの(すべて?)新しい機能インターフェイスのメソッドは、未チェックの例外も宣言しません。