はじめに
開発する上で、避けたいけど避けられない。エラー。。
どんな優秀なエンジニアもエラーには何度も遭遇します。
例外処理を記述しておくことで、デバッグや想定外のエラーにも対応できたりとメリットがたくさんあります。
例外処理を書けるようにしておくと良いでしょう!
例外処理について
まず、「例外」とはなんらかの異常が発生したことを表すオブジェクトです。
例外が発生すると、例外はコールスタックまで遡り、トップレベルまで伝播して行きます。
メソッド②で例外発生
↓
メソッド①呼び出し
↓
トップレベル呼び出し
例外オブジェクトは、Exception
またはそのサブクラスのインスタンスです。
(出典: Ruby Exceptions)
例外の制御
例外を発生させる
Kernel#raise
を使用する。
# 第一引数に文字列を指定すると、RuntimeErrorが発生
raise 'error!' #=> RuntimeError: error!
# 第一引数に例外クラスを指定出来る
raise StandardError, 'error!' #=> StandardError: error!
例外を捕捉する
例外の発生する可能性のある式はbegin〜end
に記述する。
begin
do_process
rescue => e # 例外オブジェクトを変数eに代入
puts "puts #{e.class}"
end
# 例外を指定すると、指定したクラスとそのサブクラスの例外が捕捉される
begin
do_process
rescue Exeption => e # 例外オブジェクトを変数eに代入
puts "puts #{e.class}"
ensure # 最後に必ず実行する処理
puts 'ここまでで処理は終了しました'
end
例外オブジェクトの主な操作は以下の通りです。
# クラス名
e.class #=> StandardError
# エラーメッセージ
e.message #=> "error!"
# コールスタック
e.backtrace #=> ["sample.rb:9:in 'maaain'", "sample.rb:11:in '<main>'"
終わりに
開発において例外処理をすることは、かなり重要になってきます。
ここを怠ると、自分で発見出来ていないバグによって、サービス利用者に迷惑をかけたりすることもあるので、意識して記述して行きましょう!!