Shimpei Wakida's Blog

日々の学びをゆるりと.

例外処理学習メモ

例外処理というものをまともに学習せずここまできてしまった。今日チームメンバーとのペアプロ中の会話で、自分が明らかに例外処理に対する理解が浅いことが分かったので、基礎の基礎を学び直す。以下メモ。

Rubyにおける例外処理

(チェリー本 第9章より)

基礎知識

  • 例外処理を入れなければ、発生した時点でプログラムは異常終了
  • 例外処理を入れると、捕捉エラーによってその後の処理をハンドリングできる
  • エラークラスを指定しなければ StandardError を捕捉する
  • 通常起こるエラーは基本StandardErrorのサブクラス

ベストプラクティス

  • 安易にrescueを使わない
    • rescueを使うということは、処理を続行させるということ
      • 余計な問題を発生させることになりうる
    • 素人は、「例外が発生したらrescueで捕捉すればいいんだな」ではなく「例外が発生したら即座に異常終了させよう、フレームワークの共通処理に全部丸投げしよう」と考えよう
    • = 原則、rescueしない
  • rescueしたら情報を残す
  • 例外処理の対象範囲と対象クラスを極力絞り込む
    • 対象が広すぎると、本来捕捉したいもの以外も捕捉してしまう
  • 例外処理よりも条件分岐を使う
    • パフォーマンス的にも良い
  • 予期しない場合は異常終了させる
    • case文はelseで例外発生させる

rescue_from

rescue_fromは、1回書けば1つのコントローラー内でどのアクションでも捕捉できる。逆にいうと、rescueはアクションごとに書く必要がある

rescue_from はRailsのメソッド。rescueはrubyのメソッド

railsguides.jp