こう 聞かれます
- 「エラーが
起きた とき、 どこで 何を しますか」 - 「try と catch は、
どこに 書きますか。 全部の 関数に 書きますか」 - 「利用者に
出すエラーの 文と、 開発者が 見る 記録は、 どう 分けますか」
面接官が 見ている点
- 空の catch で
エラーを 握りつぶす怖さを 分かっているか - 「どこでも catch する」ではなく、
受ける 場所を 決めて話せるか - 利用者向けの
文と、 調べる ための 記録を 分けて 考えているか
短い答え
- エラーを
握りつぶさず、 受けて 意味の ある 対応が できる所、 たとえば 画面や API の 入口のような 境目で まとめて 受けます。 - 利用者には、
何が 起きて次に 何を すれば よいかを 短く 伝え、 内部の 詳しい 情報は 見せません。 - 開発者が
原因を 追えるように、 何が 起きたかを 記録に 残します。
少し 詳しい答え
深い所は 投げ、 境目で受ける
年齢を
JavaScript
function parseAge(text) {
const age = Number(text);
if (!Number.isInteger(age)) {
throw new Error("年齢が整数でない");
}
return age;
}
function log(message) {
console.log("記録", message);
}
function submit(text) {
try {
const age = parseAge(text);
return age + " 歳で登録しました";
} catch (err) {
log(err.message);
return "年齢を数字で入れてください";
}
}
console.log(submit("20"));
console.log(submit("abc"));20 歳で登録しました
記録 年齢が整数でない
年齢を数字で入れてくださいparseAge は、
握りつぶさない
catch (err) {} のように
想定した 失敗と、 想定外の失敗
- 想定した失敗入力の
誤り、 在庫切れなど。 利用者に 直し方を 伝えれば、 先へ進める - 想定外の失敗 データベースに
つながらない、 プログラムの 不具合など。 利用者には 「時間を おいて 試してください」のように 伝え、 詳しい 情報は 記録にだけ残す
利用者向けの
作った
よく ある間違い
- 空の catch で黙らせる
失敗が 誰にも 伝わらず、 原因も 追えなくなります。 伝える、 記録する、 投げ直すの どれかをします - 全部の
関数に try と catch を書く 受けても 何も できない 所で 受けると、 同じ 処理が 散らばり、 かえって 見落とします。 対応できる 境目で受けます - 内部の
エラーの 文を そのまま 利用者に見せる 利用者には 役に 立たず、 作りの 情報が 漏れる こともあります。 利用者向けの 文と 記録を分けます
深掘りの問い
- 「fetch で 404 が
返ってきた とき、 catch に 入りますか」 入りません。 fetch は 通信その ものが 失敗した ときだけ失敗に なるので、 response.okを調べて 自分で 扱う、と答えます - 「後片付けを
必ずしたいときは」 finally に 書くと、 成功しても 失敗しても 動く、と答えます - 「記録には
何を 残し、 何を 残しませんか」 いつ、 どこで、 何が 起きたかを 残し、 パスワードや 個人の 情報は 残さない、と答えます