【とらいきゃっち】
try-catch(例外処理) とは?
最終更新:
💡 例外を受け止め、回復・通知・再送出を選ぶ
try内で投げられた例外をcatchで受け止める構文。ここではJavaScriptを例に、捕捉できる範囲、awaitするPromiseの拒否、finallyでの後片付けを説明します。すべての失敗が自動で回復するわけではありません。
📌 このページのポイント
- try内の実行中に投げられた例外をcatchで扱う
- JavaScriptでは捕捉値が必ずErrorオブジェクトとは限らない
- Promiseの拒否はtry内でawaitするか、適切な.catch()などで扱う
- finallyは通常の制御移行で後片付けに使い、returnやthrowの上書きに注意
- 捕捉は失敗の解消・変更の取消し・安全な継続を自動保証しない
try-catchは何をする?
tryの実行中に例外が投げられると、残りのtryの処理を飛ばしてcatchへ移る構文だよ。JavaScriptならtry { JSON.parse(text); } catch (error) { ... }のように書ける。不正なJSONを受け止めても、どう知らせるか、終了するか、代わりの値を使うかは自分で決めるんだ。
catchにはエラーオブジェクトが来る?
JavaScriptではErrorがよく使われるけれど、文字列など別の値をthrowすることもできる。だからerror.messageが必ずあるとは限らないよ。想定した例外だけ回復し、扱えない例外はthrow errorで再送出するなど、捕捉の範囲と方針を明確にするんだ。
非同期の失敗も捕まえられる?
finallyは何のため?
tryやcatchを抜ける前に後片付けをするためだよ。通常の実行では成功でも例外でも、returnしようとした場合もfinallyへ進む。ただしプロセスの強制終了などに耐える保証とは別。finallyにreturnやthrowを書くと、元の結果や例外を置き換えることがあるので注意するんだ。
catchしたら続けてよい?
もっと詳しく知りたい人へ
catchが終われば必ず次の行へ進む?
catchやfinallyでreturnすれば関数を抜け、throwすれば例外が上位へ伝わります。finallyのreturnは、tryで投げられた例外さえ置き換えることがあります。図の継続は、catchとfinallyを通常どおり終える場合の例です。
まとめ:ざっくりこれだけ覚えればOK!
「try-catch」って出てきたら「実行中に起きた例外を捕まえて処理する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「try / catch / finally」 = 試す / 捕まえる / 最後の処理
💬 複数の言語に似た構文がありますが、捕捉の型や非同期処理、資源管理の仕様は言語ごとに異なります。このページの具体例はJavaScriptです。