Part17:例外処理

凛「今回は例外処理にゃ。なんかやばいことが起きたときになんとかするための仕組みだよ」
希「これまでエラー処理なんて考えてこなかったもんなあ」
海未「・・・」
希「あかん、海未ちゃんまだ駄目や」
凛「海未ちゃん気をしっかり持つにゃ!ことりちゃんのPCにはumiフォルダもあるかもしれないにゃ!」
海未「・・・そう、そうですよね凛!私としたことが希望を捨ててしまうところでした」
希「その意気や」
凛(ほのうみなのかことうみなのか、海未ちゃんはそろそろ心を決めるべきにゃ)

凛「Elixirでは、error、throw、exitの3種類の例外があるにゃ」

  • error
    • 処理を止める(救済の余地あり)
  • exit
    • 処理を止める(救済の余地なし)
  • throw
    • フロー制御

凛「順番に見ていくよ」

凛「errorは、ここまでだとパターンマッチングのMatchErrorとかが出てきたにゃ」
海未「そういえば、マッチしなかった場合にエラー吐いてましたね」
凛「errorの出る状況っていろいろあるんだけど、違う型同士の演算とかはよくあるにゃ」

凛「必要ならraiseで自分で発生させることもできるにゃ」

凛「自分で定義だってできるよ」

凛「defexceptionが入ってるモジュールはraiseできるにゃ」
海未「errorはモジュールなのですね」
凛「それと、raiseするとそこで処理が打ち切られるから、実は上のコードの5行目はそのままだと実行されないにゃ。4行目をコメントアウトして試してね」

凛「raiseされたエラーはtry~rescueで拾って始末できるにゃ」

凛「tryのブロックの中でエラーが発生するとrescueに処理が移って、そこで事態を打開する努力ができるんだよ」
海未「対処方法を用意しておけばよいのですね」
凛「んー、どちらかというと、エラー起きたらそのまま死ぬ方が筋にゃ。ただ、このタイミングで情報収集してログに残したり、運良く復旧できそうなら復旧したり、とかかな」
希「下手に握りつぶすくらいならABENDしろって話やね」
凛「また希ちゃんが変な用語使い始めたにゃ」
希「この木何の木気になる木~♪」

凛「最初から対処できることがわかってるならthrowで、対処できないことがわかってるならexitって使い分けになるんだよ」
海未「そういえば、errorは処理を止めるためのものでした」
凛「exitは問答無用の即死攻撃にゃ」

希「それ、即死しないやつやん?」
凛「FGOだと結構仕事してくれるにゃ」
海未「何の話ですかそれは・・・」
海未(・・・かっこいいですね。難しい漢字に外国語のルビを振る、これです!)

凛「throwはどこかで処理されることを狙って投げる例外にゃ」

希「それ、誰も拾わないやつやん?」
海未「それは言わないであげてください・・・」

凛「exitとthrowは、rescueじゃなくてcatchで拾うにゃ」

凛「exitを拾うには:exitって書かないとだめにゃ。throwは何も書かなくていいにゃ」
海未「基本的にはexitは拾ってほしくないのですね」
凛「うん。exit投げたら速やかに死ぬのが原則にゃ」
希「即死攻撃というより自殺やね」
凛「幸運Eによる槍自害は定番だからそれでいいにゃ」
海未「ですから、何の話・・・」
海未(・・・ステータスの定型化はやはり基本ですね。久しぶりに何かの設定を練ってみるのも面白いでしょうか。μ’sのみんなのキャラクターシートとか)

海未「とにかく、使い分けは分かりました、errorとexitはプログラムを終了させるためのもの、throwはcatch節にジャンプするためのもの、ですね?」
凛「そうにゃ。でね、exitについては、Erlangの実行環境がうまい具合に面倒見てくれるらしいにゃ。だから、なんかだめな状況になったら遠慮なくexit投げちゃえばいいんだって」
希「そういうシステムがあるなら、アプリケーションで頑張るより任せちゃった方がええんかもなあ」

凛「最後に、afterというのも書けるにゃ」

凛「こんな感じで書くと、例外が起きても起きなくても絶対実行されるのがafterにゃ」
海未「何に使うのですか?」
凛「tryの中で使ったリソースの後片付けとかかな」

凛「例外処理はこんなところだけど、Elixirは他の言語と違って例外処理自体あまりやるものではないらしいにゃ」
希「せっかく、こんな色々仕掛けがあるのに?」
凛「例外投げるようなAPIが少ないのと、Let it crashみたいな文化があるからかにゃ」

希「次回はどうするん?海未ちゃん」
海未「そうですね・・・時々言葉だけは出てきた、構造体について見てみましょう」


おまけ

海未「それと・・・そ、その、凛」
凛「にゃ?」
海未「凛がやっているゲーム、教えていただいてもよいでしょうか・・・?」
凛(かかったにゃ!)
希(あの菌糸類が描く世界観に、海未ちゃんの中二病が反応しないわけあらへんわな)
凛「んー、あのシリーズっていろいろあるんだけど、やっぱり最初は原典のPC版をやるべきだと思うにゃ。もう絶版だけど、ネットオークションとかで探してみるとあるかもしれないにゃ」
海未「なるほど、奥が深い作品なのですね」
希(凛ちゃん、それって、えーと・・・海未ちゃんは年齢的にあかんやつやん?てゆーか凛ちゃんも)
凛(凛はアニメで見ただけにゃ。・・・海未ちゃんの反応、見てみたくないかにゃ?)
希(・・・鬼畜やね)
海未「わかりました。探してみます。ありがとうございました」


150ピース ジグソーパズル ラブライブ! 星空凛 それは僕たちの奇跡ver. ミニパズル(10×14.7cm)

LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です