CHAPTER 10 · 2 LESSONS · 26 問
失敗に備える
エラーが起きても止まらないようにし、おかしな値が来たら自分からエラーを出す。
これまでエラーは「出たら直すもの」だった。この章では見方を変える。エラーは、起きることを見こんで扱うものでもあるんだ。
自分のパソコンの中だけで動くプログラムなら、エラーは書きまちがいだ。でも、外から来たデータを扱いはじめると話が変わる。想定していない形のデータが来る、あるはずの項目が無い、数字のはずのところに文字が入っている。こちらのコードが正しくても失敗することが起きるようになる。
そこで使うのが try と catch だよ。try の中に「失敗するかもしれない処理」を書き、catch に「失敗したときにやること」を書く。エラーが起きると、そこで止まらずに catch の中へ飛ぶ。プログラム全体が落ちるかわりに、その場だけで受け止められるんだ。
catch が受け取るのは、起きたエラーそのもの。message を見れば、何が起きたのかを文字で読める。ここを表示しておくと、あとから原因を追いやすくなるよ。
もうひとつが throw。自分からエラーを出す書き方だ。「年齢に負の数が来たらおかしい」と分かっているなら、そのまま計算を続けるより、そこで止めたほうがいい。おかしな値のまま処理が進むと、ずっと後ろの行で意味の分からない結果になって、原因がたどれなくなる。
これは章1で話した「エラーは敵ではない」の続きでもあるよ。早く失敗させるほど、原因は見つけやすい。throw は、その「早く失敗させる」を自分の手でやるための道具だ。
気をつけたいのは、何でも try で囲まないことだ。囲めばエラーは出なくなるけれど、消えたのはエラーであって問題ではない。catch の中で何もしないでおくと、失敗したことに誰も気づけないまま動き続けることになる。囲むのは「失敗しうると分かっていて、失敗したときにどうするか決められる」ところだけだよ。
短い章だけれど、ここを知っているかどうかで、自分のアプリを作りはじめたときの手ざわりが変わる。「動かないと止まる」から「動かないときの振る舞いも自分で決める」へ進む章だと思ってほしい。