失敗に備える

INPUT · スライド

エラーで止めない

01 / 05

エラーが出ると、そこで止まる

これまでエラーは「出たら直すもの」だった。でも、書きまちがい以外の理由でも失敗することがある。外から来たデータの形が思っていたものと違う、あるはずの項目が無い、といった場合だよ。

エラーが起きると、プログラムはその行で止まる。あとに書いた行はもう動かない。下の例では おわり が出ていないね。

const fruits = ["りんご"];console.log("はじめ");fruits.add("もも");console.log("おわり");

実行結果

はじめ
TypeError: fruits.add is not a function

02 / 05

try と catch で受け止める

try { } の中に失敗するかもしれない処理を書き、catch { }失敗したときにやることを書く。

エラーが起きると、その場で止まらずに catch の中へ飛ぶ。catch を抜けたあとは、何もなかったように続きが動くよ。

const fruits = ["りんご"];try {  fruits.add("もも");} catch (error) {  console.log("ついかできなかった");}console.log("つづきはうごく");

実行結果

ついかできなかった
つづきはうごく

03 / 05

エラーの中身を読む

catch のかっこに書いた名前(ここでは error)に、起きたエラーそのものが入ってくる。

message を見れば、何が起きたのかを文字で読める。画面に出ていた TypeError: のうしろの部分だよ。原因を追いかけたいときは、これを表示しておくと手がかりになる。

const box = {};try {  box.open();} catch (error) {  console.log(error.message);}

実行結果

box.open is not a function

04 / 05

finally は最後に必ず走る

catch のうしろに finally { } を足すと、成功しても失敗しても最後に必ずその中が動く。

「終わったことにする」「後片づけをする」のように、どちらの道でもやっておきたい処理を置く場所だよ。

try {  console.log("よみこみちゅう");  const memo = {};  memo.save();} catch (error) {  console.log("しっぱいしたよ");} finally {  console.log("かたづけおわり");}

実行結果

よみこみちゅう
しっぱいしたよ
かたづけおわり

05 / 05

囲むのは決めておけるところだけ

try で囲めばエラーは出なくなる。でも消えたのはエラーであって、問題ではないcatch の中で何もしないでおくと、失敗したことに誰も気づけないまま動き続けてしまう。

囲むのは「失敗しうると分かっていて、失敗したときにどうするか決められる」ところだけ。迷ったら、catch に書くことを先に考えてみるといいよ。

それじゃあ、受け止める練習をしてみよう。