例外処理

Frontend SELF JA
レベル 36 , レッスン 4
使用可能

10.1 try...catch ブロック

例外処理は、コードの安定性と信頼性を向上させるための重要なプログラミングの側面だよ。 JavaScriptでは、trycatchfinallythrowというキーワードを使って例外を処理するよ。 今回の講義では、これらのキーワード、構文、使い方の例について説明するね。

1. try...catch ブロック

try...catch 構造は、try ブロック内で発生するエラーを処理するために使用されるんだ。もし try ブロック内でエラーが発生すると、catch ブロックに制御が移り、そこでエラーを処理できるよ。

構文:

    
      try {
        // 例外を引き起こす可能性のあるコード
      } catch (error) {
        // 例外を処理するコード
      }
    
  

このでは、JavaScriptではゼロによる除算はエラーにならないけど、もし他のエラー(例えば未定義の変数へのアクセス)があった場合、 catch ブロックがエラーを処理するよ。

JavaScript
    
      try {
        let result = 10 / 0;

        console.log(result);

      } catch (error) {
        console.error('エラーが発生しました:', error);
      }
    
  

10.2. finally ブロック

finally ブロックは、try ブロック内で例外が発生したかどうかにかかわらず、必ず実行されるコードを実行するために使用されるんだ。finally ブロックは catch ブロックの後に続くよ。

構文:

    
      try {
        // 例外を引き起こす可能性のあるコード
      } catch (error) {
        // 例外を処理するコード
      } finally {
        // 必ず実行されるコード
      }
    
  

このでは、エラーが発生したかどうかに関わらず、This will always execute. というメッセージが表示されるよ。

JavaScript
    
      try {
        let result = 10 / 0;
        console.log(result);
      } catch (error) {
        console.error('エラーが発生しました:', error);
      } finally {
        console.log('This will always execute.');
      }
    
  

10. 3. throw 演算子

throw 演算子は例外を明示的にスローするために使われるんだ。これを使えばカスタムエラーをスローすることができるよ。

構文:

    
      throw expression;
    
  

ここでの:

  • expression: スローされる例外としての任意の式やオブジェクト

使用例

この例では、ゼロで割ろうとするとエラーがスローされ、catch ブロックでそのエラーが処理されるよ。

JavaScript
    
      function divide(a, b) {
        if (b === 0) {
          throw new Error('Division by zero is not allowed.');
        }
        return a / b;
      }

      try {
        let result = divide(10, 0);
        console.log(result);
      } catch (error) {
        console.error('エラーが発生しました:', error.message);
      }
    
  

10.4 拡張された例と利用

例 1: 複数の例外

try ブロック内で異なるタイプのエラーが発生することがあるよ。それらをエラーオブジェクトのプロパティを使って別々に処理することができるんだ。

この例では、JSONの構文エラーを他の可能性のあるエラーと区別して処理しているよ。

JavaScript
    
      try {
        JSON.parse('{ malformed JSON string }');
      } catch (error) {
        if (error instanceof SyntaxError) {
          console.error('JSON 構文エラー:', error.message);
        } else {
          console.error('予期しないエラー:', error);
        }
      } finally {
        console.log('パースの試みが終了しました。');
      }
    
  

例 2: ネストされた try...catch ブロック

もっと細かいエラー処理のためにネストされた try...catch ブロックを使うことができるよ。

この例では、最初の try ブロック内で発生したエラーは内部の catch ブロックで処理され、 その後、そのエラーを再スローして外部の catch ブロックで処理されるんだ。

JavaScript
    
      try {
        try {
          let result = divide(10, 0);
          console.log(result);
        } catch (innerError) {
          console.error('内部キャッチ:', innerError.message);
          throw innerError;
        }
      } catch (outerError) {
        console.error('外部キャッチ:', outerError.message);
      } finally {
        console.log('ネストされた try...catch が終了しました。');
      }

      function divide(a, b) {
        if (b === 0) {
          throw new Error('ゼロで割ることは許可されていません。');
        }
        return a / b;
      }
    
  

例 3: リソース解放のための finally の使用

finally ブロックは、ファイルのクローズやネットワーク接続の終了などのリソースを解放するのに便利だよ。

この例では、ファイルの読み込み時にエラーが発生したかどうかに関わらず、ファイルは常に閉じられるよ。

JavaScript
    
      function readFile(filePath) {
        let file;
        try {
          file = openFile(filePath); // ファイルを開く関数
          // ファイルを操作
        } catch (error) {
          console.error('ファイルの読み込みエラー:', error.message);
        } finally {
          if (file) {
            closeFile(file); // ファイルを閉じる関数
          }
          console.log('ファイル処理が終了しました。');
        }
      }

      function openFile(path) {
        // ファイルを開くロジック
      }

      function closeFile(file) {
        // ファイルを閉じるロジック
      }

      readFile('path/to/file.txt');
    
  

trycatchfinallythrowを使用したJavaScriptの例外処理は、 より信頼性が高く安定したアプリケーションを作成するのに役立つんだ。これらの構造を理解して正しく使うことで、 エラーを効果的に管理し、リソースを解放し、ユーザーエクスペリエンスを向上させることができるよ。

1
アンケート/クイズ
オブジェクト、レベル 36、レッスン 4
使用不可
オブジェクト
オブジェクト
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION