例外について
プログラムは、正確に組まれていても、アクセスの集中などによって予期せぬエラーが生じてしまうことがあります!
このように、意図しない結果がプログラム上で得られてしまう、期待したものちょは違う結果、状況のことを例外と言います!
これをあらかじめ予期して予期しておき、例外が発生した際に行う対処を例外処理と言います!
例外処理の対処法
ここでは、例外を対処する時に使う道具について紹介したいと思います!
begin
例外になりそうな箇所を囲い処理を実行できる文法です!
bigin #例外と想定される処理 end
どんな条件でも最低1回は処理を実行するため、例外処理を始める時などに使用します!
しかし、このbeginでは、例外を捉えなければ、どこで例外処理を行うか決めることができません。
例外をとらえるためには、rescueを記述しないといけません!
rescue
発生した例外を捕捉し、例外が起こった際に呼び出される条件節です!
beginなら、ブロック内にrescueを記述して使用します!
begin 1 / 0 rescue puts '0で割り切ることはできません' end
例外を自分で発生させる方法
例外が自分で発生させることもできます!
これを使う理由としては、不具合の原因となる箇所を明示して、処理を止めたい時などに行います!
これによって、もし例外が発生しても特定がしやすくなります!
raise
例外を発生させることができる文法です!
raise 発生させたい例外クラス, 'エラーメッセージ'
切り離せない複数の処理を1つにまとめる
例外が発生しても処理を続けた場合にはrescueを使えば処理を続けることができます!
しかし、1つでも例外が起きた場合、これをやめさせることについては、rescueではこれを止めることはできません。
そのためには、メインの処理に失敗したらその時だけ別の処理を実行して、メインの処理全てをなかったことにして注視する例外処理が必要になります。
このためには、トランザクションというものが必要になります!
トランザクション
レコードの更新を行う複数の処理を1つにまとめて行うことを指します!
これを利用することによって処理の一部は成功し、一部は失敗したという事象は発生せず、全てに処理の成功または、失敗のみの状態にすることができます!
記述は以下のような感じです!
ActiveRecord::Base.transaction do #処理1 #処理2 #... end
コメント