失敗に備える

INPUT · スライド

自分でエラーを出す

01 / 05

おかしな値でも進んでしまう

関数に思っていなかった値が渡ってきても、JavaScript はとくに何も言わない。そのまま計算して、そのまま表示してしまうよ。

下の例は年齢に負の数が来ているのに、何も起きずに通ってしまっている。ここで止められないと、ずっと後ろの行で意味の分からない結果になって、原因がたどれなくなるんだ。

const tellAge = (age) => {  console.log(`${age}さいだよ`);};tellAge(-3);

実行結果

-3さいだよ

02 / 05

throw で自分から出す

throw new Error("メッセージ") と書くと、その場でエラーを起こせる。メッセージには「何がどうだと困るのか」を自分の言葉で書いておくよ。

throw の行まで来ると、そこから先は動かない。受け止める catch が無ければ、そのままプログラムが止まる。

const checkAge = (age) => {  if (age < 0) {    throw new Error("としは0いじょうで");  }  console.log(`${age}さい`);};checkAge(12);checkAge(-3);

実行結果

12さい
Error: としは0いじょうで

03 / 05

呼び出した側で受け止める

投げたエラーは、呼び出した側の try / catch で受け止められる。前のレッスンでやったとおりだよ。

catch が受け取った errormessage には、自分で書いた文がそのまま入っている。だから読んだ人に伝わる言葉で書いておくと、あとで助かるんだ。

const checkAge = (age) => {  if (age < 0) {    throw new Error("としは0いじょうで");  }  console.log(`${age}さい`);};try {  checkAge(-3);} catch (error) {  console.log(error.message);}

実行結果

としは0いじょうで

04 / 05

早く失敗させるほど原因が近い

throw を書く場所は、おかしな値に気づいたところだよ。関数の入口で調べてはじいてしまうのがいちばん分かりやすい。

そのまま進めてしまうと、変な値が計算を通り抜けて、ずっと後ろの行で「なぜこの結果になるのか分からない」という形で出てくる。近いところで失敗させれば、原因も近いんだ。

const buy = (count) => {  if (count <= 0) {    throw new Error("こすうは1いじょうで");  }  console.log(`${count * 120}円`);};try {  buy(0);} catch (error) {  console.log(error.message);}

実行結果

こすうは1いじょうで

05 / 05

メッセージは読む人のために

"だめ" とだけ書いてあるメッセージは、あとから読んでも何も分からない。何が・どうだと困るのかを入れておこう。

  • 伝わらない … "エラー"
  • 伝わる … "なまえがからっぽ"

止めるのは意地悪ではなくて、あとで困らないための親切だよ。それじゃあ、自分でエラーを出してみよう。