asaのブログ

TypeScript、JavaScript、WebGL、画像処理について

JavaScriptの例外処理

◼︎例外をキャッチしたい場面

 事前にあるオブジェクトAが作成され、オブジェクトBがAを使用するとき、Aがない場合に例外として補足したい。

 具体的には、次の処理で例外を補足したい。

 ここのnullチェックを例外にしたい理由は、やはりここにはnullで来ることはないということを明示しておきたいのと、発生場所と原因がわかるようにしておきたいと言う意図からです。

protected createEditorBox(): void {
    this.editorBox = new Box();
    this.editorBox.fillColor('#99ffff');
    this.editorCanvas = new Canvas(250, 250);
    this.editorBox.addChild(this.editorCanvas);
    if (this.mainBox === null) {
           //  例外を補足したい
    }
    this.mainBox.addChild(this.editorBox);
    this.mainBox.setGrow(0, 1);
}

◼︎JavaScriptの例外処理  JavaScriptの例外処理はthrowで例外を投げるか、try...catchで例外を受け取るかの2通りの方法がある。

 例外はErrorオブジェクトを使用して補足する。JavaScriptのErrorオブジェクトには6つの型があって、それぞれに意味合いが異なる。

  • EvalError : eval()関数を使用した時に発生したエラーを補足する。eval()関数は、その引数に指定した文字列をJavaScriptコードととして実行する関数のこと。現在のECMAScriptの仕様では使用されていない。

  • RangeError : 数値の有効桁数が1以上100以下の範囲にない時に投げられる例外。有効桁数はNumber.toPrecision()で確認することができる。

  • ReferenceError : 明示されていない変数を使用した時に投げられる例外。

  • SyntaxError : 構文エラーを補足しようとする時に使用する例外。

  • TypeError : 型が違う変数に対して、別の型のメソッド呼び出しなどを行った際に補足される例外。

  • URIError : decodeURI()などの関数で不正なURIを指定した時に補足される例外。

 予期される例外に対して、明示的に型を指定できればよりコードを読む側には分かりやすいが、上にあげた中に今回使用できそうなものはない。そこでErrorオブジェクトを投げることにした。

◼︎例外を補足する

次の様にしてこの関数をメンバとしてもつクラスと、発生場所であるこの関数名を明示しておきます。

if (this.mainBox === null) {
    throw new Error('[Renderer.createEditorBox()]');
}