慣習として、Scala コードは null を使用しません (少数の例外がありますが、これらのライブラリ関数を使用する場合はすぐに修正する必要があります)。
したがって、Scala からの null は、何かがうまくいかなかったこと (少なくともPBCAK ) の兆候であるため、例外をスローすることもできます。これは日常的な操作ではありません。これは深刻な問題です。深刻な失敗をキャッチするたびに、例外をキャッチします。IllegalArgumentException
a の代わりにan をキャッチしても、NullPointerException
追加情報は追加されません。オリジナルはそのままにしておきます。
Option
コードが Java からのものである場合、それを処理する標準的な方法は、 に変換null
されるでラップすることNone
です。そうすれば、おそらく例外をスローする必要さえありません。を返すだけNone
です。
def myMethod(p: String) = Option(p).map(_.toLowerCase)
null のときに続行できない場合は、有益な例外が役立つかどうかを検討する必要があります。 Option(p).orElse(throw new IllegalArgumentException("Null!"))
は、例外をスローする感情を表現する 1 つのコンパクトな方法です。
Scala 2.10 ではscala.util.Try(...)
、例外を自動的にキャッチしてパッケージ化するものをラップすることもできます。スローされた例外ではなく、パッケージ化された例外が必要な場合は、これが適しています。(そしてTry
の代わりに使用しOption
ます。)
import scala.util.Try
def myMethod(p: String) = Try(p.toLowerCase)
最後に、代替結果をより一般的に処理するには、 を使用しますEither
。エラー処理の規則では、予想される出力は でありRight(whatever)
、 whileLeft(whatever)
は何か問題が発生したことを示します。