CHAPTER 10 · 2 LESSONS · 26 問

失敗に備える

エラーが起きても止まらないようにし、おかしな値が来たら自分からエラーを出す。

これまでエラーは「出たら直すもの」だった。この章では見方を変える。エラーは、起きることを見こんで扱うものでもあるんだ。

自分のパソコンの中だけで動くプログラムなら、エラーは書きまちがいだ。でも、外から来たデータを扱いはじめると話が変わる。想定していない形のデータが来る、あるはずの項目が無い、数字のはずのところに文字が入っている。こちらのコードが正しくても失敗することが起きるようになる。

そこで使うのが trycatch だよ。try の中に「失敗するかもしれない処理」を書き、catch に「失敗したときにやること」を書く。エラーが起きると、そこで止まらずに catch の中へ飛ぶ。プログラム全体が落ちるかわりに、その場だけで受け止められるんだ。

catch が受け取るのは、起きたエラーそのもの。message を見れば、何が起きたのかを文字で読める。ここを表示しておくと、あとから原因を追いやすくなるよ。

もうひとつが throw自分からエラーを出す書き方だ。「年齢に負の数が来たらおかしい」と分かっているなら、そのまま計算を続けるより、そこで止めたほうがいい。おかしな値のまま処理が進むと、ずっと後ろの行で意味の分からない結果になって、原因がたどれなくなる。

これは章1で話した「エラーは敵ではない」の続きでもあるよ。早く失敗させるほど、原因は見つけやすいthrow は、その「早く失敗させる」を自分の手でやるための道具だ。

気をつけたいのは、何でも try で囲まないことだ。囲めばエラーは出なくなるけれど、消えたのはエラーであって問題ではない。catch の中で何もしないでおくと、失敗したことに誰も気づけないまま動き続けることになる。囲むのは「失敗しうると分かっていて、失敗したときにどうするか決められる」ところだけだよ。

短い章だけれど、ここを知っているかどうかで、自分のアプリを作りはじめたときの手ざわりが変わる。「動かないと止まる」から「動かないときの振る舞いも自分で決める」へ進む章だと思ってほしい。

この章のレッスン

エラーを受け止める

  1. 88エラーで止めないtry に失敗するかもしれない処理、catch に失敗したときの処理を書こう。 問題へ

自分でエラーを出す

  1. 89自分でエラーを出すthrow でおかしな値をその場ではじいて、呼び出した側で受け止めよう。 問題へ

これがこのコースの最後の章。