はじめに
目的
本記事はJavaScript&TypeScriptの基礎知識を体系的に学び直して、生成AIに頼りすぎず自力でコーディングできるようになることを目的としています。
学んだ内容のアウトプットとして、シリーズ形式で書いていきます。
ゴール
- TypeScriptでフルスタックアプリを個人開発する
- チーム開発でタスクを渡された際に、メンバーのコードを読んで理解したり自分で実装したりできる状態にする(調べる回数をできるだけ少なくする)
シリーズ記事
【ノート】JavaScript基礎①(変数const, let・データ型と型変換)
【ノート】JavaScript基礎②(条件分岐)
【ノート】JavaScript基礎③(配列操作)
例外とは
プログラム実行時に発生する、予期せぬエラーのこと。
Javaではプログラムで対処できるエラーを例外(Exception)、対処できないものをエラー(Error)と区別するが、JavaScript,TypeScriptでは厳密な区別はないらしい。
エラーが発生しそうな処理に対して、あらかじめ対応する処理を用意しておくことにより、意図せずプログラムが止まったり壊れたりするのを防ぐ。
例外が発生する場面
以下のように、外部プログラムとのやり取りと、データの操作を行うときに発生しやすい。
自プログラム以外でのエラー(サーバーエラー、ネットワークエラー、外部エラーなど)が考えられるため、適切なエラー処理が必要になる。
※理解があいまいなため調査中
- APIなどの通信
- データベースへのアクセスおよび操作
- ファイル操作
- JSONデータの変換(パース)
例外処理の構文
try-catch-finally文
try {
//例外が発生する可能性がある処理
//ここで例外が発生したら、catch節の処理へ移る
} catch (error) {//引数errorにはエラー情報をもつErrorオブジェクトが入る
//例外が発生した場合の処理(エラーメッセージ出力など)
} finally {
//エラーを捕まえても動作させたい処理(めったに使わない)
//tryまたはcatchの処理のあとに実行される
}
※注意点
-
tryのみ記述はNG(必ずtryとcatchまたはfinallyをセットで使う) -
catchとfinallyはどちらかを省略できる(だいたいfinallyが省略される) -
tryとfinallyの組み合わせでは例外をキャッチできない
throw文
意図的にエラーを発生させる(例外を投げる)処理。
想定外の処理結果をエラーとして扱いたいときに使う。
try-catchで対応しないとプログラムが異常終了するので注意。
try {
throw new Error("エラー発生")
} catch (error) {
console.log(error.message) //エラー発生
}
例外はどこに投げられるのか
結論、呼び出し元の関数に投げられる。
main.js
import { throwException } from "./throwException.js";
const exceptionHandler = () => {
try {
throwError();//エラー発生➡catchへ
} catch (err) {
console.error(err);
} finally {
//エラーを捕まえても動作させたい処理があればここに書く
}
};
exceptionHandler();
throwException.js
export const throwException = () => {
//thwow文:意図的に例外(エラー)を発生させる
throw new Error("エラー発生")
}
上記の例では以下の順番で処理が進む。
1.exceptionHandler()のtry節でthrowError()が呼び出される
2.throwError()でエラー発生、呼び出し元のexceptionHandler()にエラー情報が投げられる
3.エラーを検知したのでcatch節の処理を実行
エラーの握りつぶしに注意!
エラーをcatch文で受け取ったにもかかわらず何もしないことを、俗にエラーを握り潰すという。
import { throwException } from "./throwException.js";
const exceptionHandler = () => {
try {
throwError();
} catch (err) {
//エラーをcatchしたが何もしない
console.log("Hello World")
}
exceptionHandler(); //Hello World
throwException.js
export const throwException = () => {
throw new Error("エラー発生")
}
上記の例では、ログだけ見ると適切に処理が終わったように見える。
しかし、実際は投げたエラーが残ったまま後の処理に移る。
そのため、エラーは必ずcatch文で処理すること。