Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【JavaScript】例外処理を簡単に解説


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210612090942p:plain

おはようございます。Shotaです。

今回も前回と同じように、JavaScriptの基本文法について簡単に解説します。

今回は例外処理について解説します。



例外処理

例外処理とは、プログラムの実行を妨げる例外が発生した時にその内容に応じて実行される処理のことです。

例えば、「入力された2つの数を足し合わせて結果を返す」コードがある時に、利用者が入力欄に「あ」という文字列を書き入れると足し算ができなくなります。

このように、プログラムが通常の処理では想定していない事態や事象を「例外」(exception)と呼び、例外が発生したときの対応を書いたコードを例外処理と呼びます。

JavaScriptにおける例外処理は次の2つです。

  • try...catch構文
  • throw構文


try...catch構文

try...catch構文は例外が発生する処理をマークし、例外が発生したときの処理を記述するための構文です。

基本的には、tryで例外を確認し、catchで例外が発生したときの処理を記述していきます。この構文にはfinallyを書くことがありますが、これは省略しても大丈夫です。(catchfinallyのうち、片方が存在していればもう片方は省略できます)

const func = x => x ** 2

try {
    console.log('start')
    // 例外が発生する
    console.log(func(w))
    // 例外が発生したので、この行は実行されない
} catch (error) {
    // 例外が発生すると実行される
    console.log('error!')
    console.log(`Error: ${error.message}`)
} finally {
    // このブロックは例外の発生に関係なく必ず実行される
    console.log('finished.')
}

▼実行結果

start
error!
Error: w is not defined
finished.

上記のコードで確認してみると、変数wが定義されていないのでエラーが発生し、catchで例外処理が行われていることが分かります。


throw構文

throwを使うとユーザが例外を投げられます。例外として投げられるオブジェクトは、catchで関数の引数のようにアクセスできます。catch節でオブジェクトを参照できる識別子を例外識別子と呼びます。

以下のコードではcatch節のerror節でキャッチしたエラーオブジェクトを参照しています。

try {
    throw new Error('Error!')
} catch(error) {
    console.log(error.message)
}

▼実行結果

Error!


エラーオブジェクト

throwではエラーオブジェクトを例外として投げられます。ここでは、throw文で例外として投げられているエラーオブジェクトについて見ていきます。


Error

次のコードでは、assertNumber関数でエラーオブジェクトを作成し、例外としてthrowしています。投げられたオブジェクトはcatch節の例外識別子からエラーオブジェクトを取得でき、エラーメッセージを確認できます。

function assertNumber(num) {
    if (num == 0) {
        throw new Error(`${num} is False.`)
    }
}

try {
    assertNumber(0)
} catch(error) {
    console.log(error.message)
}

▼実行結果

0 is False.


ビルトインエラー

ビルトインエラーは、簡潔に言えばJavaScript実行環境にデフォルトで備わっているエラーオブジェクトです。ビルトインエラーはすべてErrorオブジェクトを継承したオブジェクトのインスタンスです。

そのため、ユーザが定義したエラーと同じように例外処理できます。

ビルトインエラーにはいくつか種類がありますが、本記事では代表的なものを紹介していきます。


ReferenceError

ReferenceErrorとは、存在しない変数や関数などの識別子が参照されたときのエラーです。次のコードでは存在しない変数を参照しているのでReferenceErrorが投げられます。

try {
    // 存在しない変数を参照
    console.log(arg)
} catch(error) {
    console.log(`${error.name}: ${error.message}`)
}

▼実行結果

ReferenceError: arg is not defined


SyntaxError

SyntaxErrorは文法が間違っている時に発生するエラーです。(Pythonにも同じ名前と同じ意味のエラーがあります)

SyntaxErrorJavaScriptを実行する前の段階で発生します。そのため、try...catchで例外を確認できません。


TypeError

TypeErrorは値が期待される型ではない場合のエラーです。

次のコードでは、関数ではないオブジェクトを関数呼び出ししているのでTypeError例外が投げられています。

try {
    // 関数ではないオブジェクトを関数として呼び出す
    const fn = {}
    fn()
} catch(error) {
    console.log(`${error.name}: ${error.message}`)
}

▼実行結果

TypeError: fn is not a function


まとめ

今回はJavaScriptにおける「例外処理」について簡単に解説しました。

今回の記事を参考に、JavaScriptの例外処理についての理解を深めていただけると幸いです。

今回の記事はこれで終了です。

【参考サイト】

jsprimer.net

e-words.jp