Part7:例外処理

海未「おはようございます」
穂乃果「あ。おはよう海未ちゃん・・・あれ、なんか大丈夫そうだ」
ことり「ふあぁ・・・おはよう、海未ちゃん、穂乃果ちゃん」
穂乃果「おはようことりちゃん!寝不足?」
ことり「うん・・・昨日の夜、海未ちゃんがあんなに何度も求めてくるから・・・♡」
穂乃果「・・・!!?」
海未「こ、ことり!それは、ことりが・・・」
ことり「やんやんだめだめ♡海未ちゃんの、普段見れないあーんな表情、とってもかわいかったぁ♡」
海未「そ、それはことりが、私の弱いところばかり狙ってくるからです!」
ことり「ことりは、海未ちゃんのことならなーんでも知ってるのです♪」
海未「いくら幼なじみとはいえ、本当に何もかも知られているとは・・・」
ことり「焦らして焦らして、えいっ!ってしたときの海未ちゃんの反応、何度でも見たくなっちゃうの♡」
穂乃果「あ、あのー、お二人さん・・・そーゆーの、わたしたちにはまだちょっと早いんじゃないかな・・・?」
海未「え?」
ことり「そーゆーの?」


穂乃果「はあ、罰ゲームに、徹夜で、ババ抜き・・・そうでしたか」
ことり「海未ちゃんったら勝てないのわかってるのに何度も何度も・・・」
海未「負けっぱなしでは悔しいではないですか!」
ことり「えっちだと思った穂乃果ちゃんがえっちなんだよ」
穂乃果「うう、穂乃果の心は汚れていました・・・」
穂乃果(・・・でも、海未ちゃんはともかく、ことりちゃんは絶対”そーゆー楽しみ方”してたよね・・・?)


本編ここから

海未「今回は例外処理について見ていきます。何か想定外のことが起きたときに対処する方法ですね」

Exception: TypeError: null has no properties

海未「このようにイレギュラーな状況、例えばnullに対して適当な関数を呼び出した場合に発生するのが例外です。この場合はTypeErrorという例外が発生していますね」
ことり「例外が発生すると、どうなるの?」
海未「何の対処もしなければ、プログラムはクラッシュします。ですから、それに対処するための構文がこれから見るtry~catch~finallyです」

海未「例外の発生し得る部分をtryのブロックで括っておくと、例外が発生したときにそれに続くcatchブロックで拾うことができます」

TypeError: null has no properties
スタックトレース:
@Scratchpad/1:11:3
やんやん♡

海未「これでプログラムはクラッシュすることはありません」
ことり「catchの中で後始末と復旧処理をすればいいんだね」
海未「そうですね。それと、発生した例外をcatchで拾って、そのまま何もせずに先に進むのは例外の握り潰しといって望ましくないやり方です」
穂乃果「クラッシュしなけりゃいいじゃん、みたいなやつだよね」
海未「何か異常な状況が起きているのですから、ちゃんと対処するか、対処できないのなら潔くクラッシュさせるべきです」

海未「finallyというブロックがあります。これはtry~catchに続けて書くもので、例外が起きようが起きまいが必ず実行される処理を書きます」

TypeError: null has no properties
スタックトレース:
@Scratchpad/1:11:3
やんやん♡
遅れそうですぅ

海未「これは例外が発生した場合ですが、仮にtryで例外が発生しなかったとしても、finallyの中は必ず実行されます」
穂乃果「どういうときに便利なの?」
海未「リソースの後始末が多いですね。サーバサイドJavaScriptでファイルを開いたら、例外が発生しても必ずファイルを閉じられるようにする、といったところでしょうか」

海未「この例外ですが、throwを使って自分で発生させることもできます」

やんやん♡
電車よ急げ

海未「throwは文字列でも数値でも真偽値でもオブジェクトでも、何でも投げることができます」
海未(ここでゲイ・ボルグと書かなかった自分を褒め称えたいですね)※Elixir編参照
ことり「困ったら例外投げればいいのかな?」
海未「通常のエラー処理と例外処理の使い分けの感覚を養うのは案外難しいのですが、例外は本当に例外的な状況にとどめておくと良いでしょう」


海未「次回はもう1つの制御構造、ループの話をします」
穂乃果「あれ覚えると色々楽ができるんだよね」
海未「確かに怠惰はプログラマの美徳ですが穂乃果の場合は程度というものが」
ことり「まあまあ、海未ちゃん・・・」


LINEで送る
Pocket


返信を残す

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