Scalaでの例外とEither
Scala が得意な方に質問。例外と Either どちらを使うべきなのでしょう? http://cooldaemon.tumblr.com/post/5383939918/scala-amqp-i-f #scala
2011-05-11 14:18:27@cooldaemon 俺の中ではEitherはJavaのチェック例外と同じ感覚で、利用側にExceptionの処理を適切に行わせたい場合に採用するものだと思ってます #scala
2011-05-11 14:21:47@cooldaemon 検査例外的に異常の場合にLeftである型を返すのを明示したい場合にEither使ってます。Exceptionのサブクラス作らなくても好きな型を突っ込めるので場合によってはExceptionより短くかける時もありますね。
2011-05-11 14:23:04@yuroyoro なるほどー。追加で恐縮ですが、多分、allCatch だと非チェック例外も捕まえてしましますよね。connect の中で、allCatch しているのですが、try catch でチェック例外だけ Either にした方が良いでしょうか。
2011-05-11 14:32:16@cooldaemon @yuroyoro 設計方針によるのでしょうが、 色々なライブラリみててもあまりEither使っているの見ないですよね?
2011-05-11 14:37:56@pomu0325 チェック例外のみ Either で、非チェック例外は無視という事ですよね。Left に Exception や、そのサブクラスを包むのではなく、オリジナルのエラーを示すオブジェクトを包んだ際のメリットは、match が楽以外に何かありますでしょうか。
2011-05-11 14:39:54@cooldaemon scalaでは例外にチェック/非チェックの区別はありませんので、allCatchでは全部補足しますね。connectを呼び出す側に、必ず処理させたい失敗の種類ならEitherで明示的に渡し、無視する自由を与えたい種類の失敗は例外ですかね
2011-05-11 14:43:31Eitherのメリットは、失敗の処理を実装しているかがコンパイル時に網羅的にチェックできる。デメリットは、かならず実装しなければならないし、呼び出した先から上位へ伝搬させたい場合に煩雑になる
2011-05-11 14:45:59@xuwei_k 何となく、Maybe は、例外をサポートしない言語が、例外をエミュレートするもの的な考えもあったので…。
2011-05-11 14:46:11@yuroyoro ありがとうございます。スッキリしました。Java ライブラリのチェック例外を Either に変換。非チェック例外は無視で行きます。
2011-05-11 14:48:17Eitherと例外の使い分けか。個人的には基本例外を使って、Contextを共有できないケース(バックグラウンドスレッドで発生した例外をイベントディスパッチスレッドで画面表示するとか)にEitherを使う、のがいいんじゃないかと思ってるがどうだろう #scala
2011-05-11 15:28:11