Rubyのensure節
- http://rubyist.g.hatena.ne.jp/gaba/20060803/1154622044
- http://subtech.g.hatena.ne.jp/secondlife/20060804/1154700185
書籍に else はあまり役に立ちませんとか書いてあったけど、ensure の方がいらなくね? end の後ろに書いておけばヨクネ? とか思うのはオレが例外初心者だからでしょうか。
例外は捕捉しないけど、リソースの開放したいときとかに使うんじゃね?
Javaだとストリームをopenして処理するメソッドはfinally 節にストリームのclose処理を入れて、入出力例外は捕捉しない、みたいなパターンが多いんじゃないかな。まぁ、例外を捕捉してcloseしてから例外を再送っていうのでもいいけど記述がえらく冗長になる。
Ruby の場合は File.open みたいなリソースの取得メソッド自体がブロックを受け取れるようになっていて、ensure を書かなくてもリソースの開放は確実に行われるというパターンが多い。でも実はブロックを評価する側ではensure節にリソース開放処理を入れているというオチ。