本記事は一人アドベントカレンダー企画の一つです。
30代未経験エンジニアが25日後にJavaScriptをマスターするカレンダー
JAVASCRIPT.INFOを元にJavaScriptを勉強していき、そこで学んだ知識をアウトプットしていきます。
25日でJAVASCRIPT.INFOをやりきり、未経験エンジニアがJavaScriptをマスターする過程を投稿していきます。
10.1 エラーハンドリング, "try..catch"
知らない単語
- コントロールフローとは
- 受信側の処理が追いつかずにデータを取りこぼしたりするのを防ぐため、通信状況に応じて送信停止や速度制限などの調整を行う機能
学んだこと
- “try…catch” 構文
普通はエラーが発生するとスクリプトは即時に停止し、それをコンソールに出力するが、
「try..catch」を使用する事でエラーがあった時にcatchに入り、処理が停止しない
書き方は
try {
// code...
} catch (err) {
// error handling
}
となっていて、(err)がある事でエラーになった場合、エラーの中身を見る事ができる
- try…catchの利用
JavaScriptで JSON.parse(str) を使う場合、
let json = "{ bad json }";
try {
let user = JSON.parse(json); // <-- エラーが起きたとき...
alert( user.name ); // 動作しない
} catch (e) {
// ...実行はここに飛ぶ
alert( "Our apologies, the data has errors, we'll try to request it one more time." );
alert( e.name );
alert( e.message );
}
json が不正な形式の場合、JSON.parse はエラーになるのでスクリプトは停止する
この書き方では、もしデータが間違っている場合、間違っている事自体がわからないので、
どのようなエラーかを知る為に try..catch を使った方がよい
自分で怪しいと思った箇所にはtry..catch を入れてもいいかもしれない
- Throw演算子
Throw演算子は自分の出したいエラーを出せる
書き方は
throw <error object>
let error = new Error(message);
であり、通常のブラウザが出してくるエラーより自分で設定したエラーの方が読みやすい
- 再スロー
catchに入ってもエラーを出すことができる
- try…catch…finally
finallyはtryの後でもcatchの後でも入る
最後に処理を加えたい時に使用する
感想
try…catchは自分でエラーが出るかチェックでき、Throw演算子は自分なりのエラー表示ができるので、自由度が高く便利である。
10.2 カスタムエラー, Error の拡張
知らない単語
- 無し
学んだこと
カスタムエラー
Throw演算子は自分でエラーメッセージが作れるが、カスタムエラーはさらに細かいものである
コードの書き方は
// JavaScript自体で定義された組み込みのErrorクラスの「擬似コード」
class Error {
constructor(message) {
this.message = message;
this.name = "Error"; // (組み込みのエラークラスごとに異なる名前)
this.stack = <nested calls>; // 非標準だが、ほとんどの環境はサポートしている
}
}
というようになり、class Error が決まりになっている
- さらなる継承
簡単に言えば、「class ValidationError extends Error」で1番細かいエラーを作る事ができる
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
- 例外のラッピング
下記のコードでは2種類のエラーがある
try {
...
readUser() // 潜在的なエラーの原因
...
} catch (err) {
if (err instanceof ValidationError) {
// バリデーションエラーの処理
} else if (err instanceof SyntaxError) {
// シンタックスエラーの処理
} else {
throw err; // 未知のエラー、再スロー
}
}
要は、バリデーションエラーとシンタックスエラーの時で違う処理を書く事ができる
感想
エラーメッセージはかなり自由に変更する事がよくわかる。実務でもよく使用する事になるのかはわからないが、わすれないようにする。
最後に
元ページに書いてある事をかなり簡単に要約しているが、解釈が間違っている可能性もあるので、自分で詳しく調べたり、周りのエンジニアに聞いて正しい知識を身につけたい。