大抵のプログラミング言語には、エラーを検出した時に例外処理を行う仕組みが用意されています。JavaScriptであれば「try~catch文」がそれにあたり、基本的には以下のように使います。

try{
    //こなしたい処理
}catch( e ){
    //こなしたい処理中にエラーが出た場合の例外処理
}

このように、通常はエラーが出ないことを期待しつつ、万が一エラーが出た時のためにcatchへ例外処理を用意しておくというものです。 

 

この挙動を積極的に利用して、「エラーが出るか出ないか」それ自体を活用するのも有用です。例えば、InDesignで特定のスウォッチ名がドキュメントに存在するか否かを調べるときなどに使えます。

 

まず、try~catch文を使わない「きまじめなコード」で考えてみます。 

//スウォッチ名がドキュメントに存在するか否かを調べる(きまじめ版)
function existsColor(cName){
    var i;
    var cntColors= app.activeDocument.swatches.length;
    for (i=0;i<cntColors;i++){
        if(app.activeDocument.swatches.item(i).name===cName){return true;} //存在したのでtrueを返す(関数を抜ける)
    }
    return false; //存在しなかった
}
var res=existsColor('C=100 M=0 Y=0 K=0');
alert(res);

このコードでは存在を確認したいスウォッチ名を、ドキュメントにある全てのスウォッチ名と比較して結果を返しています。

 

もちろん、このような処理が必要な場合もありますが、単にスウォッチの有無知りたいだけなら、try~catch文を使って以下のように処理することも可能です。 

//スウォッチ名がドキュメントに存在するか否かを調べる(簡略版)
function existsColor(cName){
    try {
        var dummyStr= app.activeDocument.swatches.item(cName).name; //無意味なコード
        return true; //エラーなし(オブジェクトが存在する)
    } catch (err){
        return false; //エラー(=存在しないオブジェクトへアクセスした)
    }
}
var res=existsColor('C=100 M=0 Y=0 K=0');
alert(res);

この例でtry~catch文で行っているのは、存在を確認したいスウォッチ名の名前を知るという無意味な処理です。

しかし、その名前を持つスウォッチがドキュメントに存在しなければInDesignからエラーが返されるので、それを存在の有無を確認する手段に使っています。

 

 

Joomla templates by a4joomla