Sooey

2013-11-10 22:08:22 +0900

Rubyにおけるraiseとfailの使い分けについて。

久々にrubocopを動かしたら、

app/models/user.rb:139:7: C: Use `fail` instead of `raise` to signal exceptions.
      raise Exceptions::AlreadyChecked, msg
      ^^^^^

こんな感じで、raiseじゃなくてfailを使え、みたいな警告が結構出た。

2つのキーワードの使い分けについてちょっと調べてみたところ、Exceptional Rubyというスライドの10枚目「raise (or fail)」にて、Jim Weirich氏による以下のようなコメントが引用されていた。

I almost always use the "fail" keyword… the only time I use "raise" is when I am catching an exception and re-reaising it, because here I'm not failing, but explicitly and purposefully raising an exception. – Jim Weirich

rescueなどで捕捉した例外を再度発生させる時には「何かがfailなわけではないので」raiseを用い、それ以外の場合はfailを用いる、というような使い分けのパターンがあるようだ。