【とらいきゃっち】
try-catch(例外処理) とは?
💡 「まずやってみて、失敗したらこうする」の安全ネット
📌 このページのポイント
- try ブロック内でエラーが発生すると、即座に catch ブロックへ処理が移る
- catch ブロックではエラーオブジェクトを受け取り、エラーの種類やメッセージを確認できる
- finally ブロックを使うとエラーの有無にかかわらず必ず実行される処理を書ける
- async/await と組み合わせて非同期処理のエラーもtry-catchで捕まえられる
try-catchって具体的にどう書くの?
finally って必要なの?
ファイルを開いたら成功でも失敗でも必ず閉じたい、ローディング表示を必ず消したい、といった「何があっても必ず実行したい後片付け」に使う。なくても動くけど、リソースのクリーンアップに重宝する。
非同期処理のエラーってtry-catchで捕まえられる?
async/await を使っていればtry-catchでOK。Promiseを直接使っているなら .catch() メソッドで捕まえる。コールバックスタイルの場合はtry-catchでは捕まえられないので、コールバックの引数でエラーを受け取る。
エラーを全部catchしちゃえば安全なの?
逆に危険だよ。広すぎるcatchは「問題を隠してしまう」から、本来修正すべきバグが見逃される。catch(e) { /* 何もしない */ }は最悪のパターンで「例外の握りつぶし」と呼ばれる。catchするなら「何のエラーを・どう処理するか」を明確にして、想定外のエラーは上位に投げ直すのが原則だよ。
Goには try-catch がないって聞いたけど、どうやってエラー処理するの?
Goは関数の戻り値でエラーを返す方式を採用しているよ。「result, err := doSomething()」のように、2つ目の戻り値でエラーを受け取って「if err != nil」でチェックする。try-catchより冗長だけど、エラー処理が明示的で見落としにくい。RustのResult型も同じ思想で、例外を使わずにエラーを型で表現する。言語設計者の「例外は制御フローを見えにくくする」という哲学が反映されているんだよ。
まとめ:ざっくりこれだけ覚えればOK!
try-catchって出てきたら「エラーが出ても止まらないように受け止める構文」と思えばだいたいOK!
📖 おまけ:英語の意味
「try-catch」 = 試す・捕まえる
💬 「try(やってみる)」して例外が起きたら「catch(捕まえる)」するという直感的な名前