世界線航跡蔵

Mad web programmerのYuguiが技術ネタや日々のあれこれをお送りします。

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するときにはドキュメントに書きましょう。もちろん、例外も。

トラックバック

http://yugui.jp/articles/568/ping

現在のところトラックバックはありません

コメント

blog comments powered by Disqus

ご案内

前の記事
次の記事

タグ一覧

過去ログ

  1. 2016年07月
  2. 2016年01月
  3. 2015年09月
  4. 2015年08月
  5. 過去ログ一覧

フィード

フィードとは

その他

Powered by "rhianolethe" the blog system