ratio - rational - irrational

« TDDのogijunメソッド | Main | MS SQLServerで結果セットのシャッフル »

2006年12月15日

Rubyのcatch, throwの作法

rubyのcatch throwは安心して利用できるのか?」が面白かった。今まで使い込んだことがないから深く考えてなかった。いわれてみると、確かにブロック付きメソッドが勝手にthrowを握りつぶすと問題があるな。

でも、どこだったか忘れたけれども標準ライブラリか何かで「このシンボルをthrowします」「catchします」ってドキュメント化されてるのを見た記憶がある。そのドキュメントの意味は上の記事を読んで初めて気づいたわけだけれども。

それに、ドキュメント化しないままに勝手に握りつぶしたり翻訳したりすると問題があるのは例外も同じだしな。Rubyと限らず、C#のdelegateやJavaの匿名クラスをコールバックに用いている場面でその中から例外が発生したのを握りつぶしても同じだしな。

だとすると、結論は「catch, throwは問題がある」ではなくて、「例外やRubyのKernel#throwの使用に当たってはきちんとドキュメント化しましょう」だな。とりあえず、上の記事で例示しているFind.find, Optparse#order!, PStore#transactionは現在ドキュメントに何も書いていないので問題だな。

私はJavaがドキュメント化の習慣をChecked exceptionsとして言語仕様にきっちり組み込んでるのが好きなんだけど。だから、SQLExceptionがうざったいのはよくよく分かるけれども、それでもRuntimeExceptionの乱用は好きじゃない。Spring Frameworkはその辺勝手に例外翻訳しすぎだと思ってる。

とにかく、Rubyのライブラリ作者は、catch, throwするときにはドキュメントに書きましょう。もちろん、例外も。



トラックバック

この記事のトラックバックpingのURL:
http://idm.s9.xrea.com/blog/mt-tb.cgi/566

コメント

新しくコメントをつける

よくわからない理由により、コメントが即座には反映されないかもしれませんか゛、ボタンを押して元の画面に戻ってきたならたぶん正しく送信されています。




blog操作

検索


カテゴリー

このブログについて

あわせて読みたい

follow yugui at http://twitter.com
© 2006 Yugui

Powered by Movable Type 3.2-ja-2