Either
単なる例外以外にも使用できます。たとえば、ユーザーにinputと入力するか、その入力を含むファイルを指定する場合は、それをとして表すことができますEither[String, File]
。
Either
例外処理によく使用されます。チェックされた例外とチェックされた例外の主な違いEither
は、の制御フローEither
が常に明示的であるということです。Either
コンパイラーは、あなたが;を扱っていることを本当に忘れさせません。Either
気づかないうちに複数の場所からsを収集することはなく、返されるものはすべてEither
、などである必要があります。このため、Either
何か異常が発生した場合ではなく、制御プログラムの通常の部分として使用します。実行。また、Either
スタックトレースをキャプチャしないため、通常の例外よりもはるかに効率的です。
もう1つの違いは、制御フローに例外を使用できることです。3つのネストされたループからジャンプする必要がありますか?問題ありません-例外を(スタックトレースなしで)スローし、外側でキャッチします。5つのネストされたメソッド呼び出しからジャンプする必要がありますか?問題ない!どちらもこのようなものを供給しません。
とはいえ、ご指摘のとおり、多くの類似点があります。情報を返すことができます(ただしEither
、それは些細なことですが、チェックされた例外を使用すると、必要な追加情報を格納するための独自のクラスを作成できます)。渡すEither
ことも、他の何かに折りたたむこともできます。
Either
したがって、要約すると、明示的なエラー処理に関して例外をチェックして同じことを実行できますが、実際には比較的異なります。特に、Either
さまざまな状態の作成と受け渡しが非常に簡単になりますが、チェックされた例外は、通常の制御フローをすべてバイパスして、異常な状態に適切に対処できる場所に戻るのに適しています。