DTPab

DTPにまつわるあれこれ

{} の入れ子問題

ろくやん(id:rokuyaN)さんの下記の記事でコメント付けたけどタグ文字をエスケープできずうまくコードが貼り付けられなかった。

rokuyan.hatenablog.com

のでここに晒しておきます(元のスクリプトは上記ページ参照)。

var layObj = app.activeDocument.layers;
    numLayerLock ();//関数の呼び出し

function numLayerLock() {//処理を記した関数
    if (!Window.confirm ("処理を開始します","false ","テスト")) {
        alert ("処理を中断します");
        return; //「はい」が押されなければ関数を出る
    }
    //↓こっから処理---------------------------------------
    for (var i=0; i<layObj.length; i++){
        if (layObj[i].name.match(/\d/)){
            layObj[i].locked = true;
        }
    }
    //↑ここまで処理--------------------------------------
    alert ("処理が完了しました");//←★完了はここ
}

もともとのスクリプトでは、Window.confirm ("処理を開始します","false ","テスト")を変数flagに代入してその値をif-else文で判定していました。単に実行されたかキャンセルされたかだけを調べたいだけなので、この場合わざわざ変数に入れずに直接if文に突っ込んで値を評価させるのもいいかと思います(可読性と天秤にかける)。

その上で、評価された値を否定演算子!で真偽をひっくり返します。そうすることで最初のif文if (!Window.confirm ("処理を開始します","false ","テスト"))は偽ならif文の中のブロックに進みます。ここで警告文を表示し、return文で関数を抜けさせると入れ子がひとつ減らせます。