とあるDTPオペレーターのInDesignスクリプト備忘録

デザイナー上がりですがいまはDTP命。InDesign用スクリプトの解説などを綴っています。読者登録して戴けると励みになります。

【入門者向け⑨】条件分岐その4 複数条件(&&、||、switch...case)について

条件分岐についての説明はとりあえずこれで一段落でしょうか。
今回は複数の条件で条件分岐させる方法を書きます。
まずはif文の中で複数条件を設定する場合。次のような書き方をします。

[例1]両方の条件を満たすときに成立

var obj = app.activeDocument.rectangles[0];

if (obj.strokeColor.name=="Paper" && obj.fillColor.name=="Black") {
        obj.remove ();
    }

if文の中の「&&」に注目。
長方形が1個だけあるドキュメント上で[例1]を実行すると、「線が紙色」と「塗りが黒」の両方を満たした長方形であれば削除されます。


[例2]どちらかの条件を満たすときに成立

var obj = app.activeDocument.rectangles[0];

if (obj.strokeColor.name=="Paper" || obj.fillColor.name=="Black") {
        obj.remove ();
    }

if文の中の「||」に注目。
長方形が1個だけあるドキュメント上で[例2]を実行すると、「線が紙色」と「塗りが黒」のどちらかを満たした長方形であれば削除されます。
例では2つの要素の比較ですが、&&も||もいくらでもつなげて書くことができます。混ぜることもできます。
ただやみくもにつなげて伸ばしても狙った分岐にならないと思うので、別な機会にその辺の説明を書ければと思います。


つづいて、こんなときはどう書けば良いでしょう。

f:id:rokuyaN:20170706001109j:plain

図のように「赤」「青」「黄」という文字が入力された3つのテキストフレーム(塗りはなし、線はあってもなくても)。
スウォッチパレットにも「赤」「青」「黄」という名前のカラースウォッチがあります(配合は名前通りの色であれば適当で)。
テキストフレーム内の文字と同じ名前の色で、3つのテキストフレームそれぞれに塗りを設定していくとしたらどのように書きましょう…

いままで説明してきた次のような書き方でもできるっちゃできるのですが…

[例3]

var obj = app.activeDocument.textFrames;

for (var i=0; i<obj.length; i++) {
        if (obj[i].contents == "赤") {
                obj[i].fillColor = "赤"
            }
        if (obj[i].contents == "青") {
                obj[i].fillColor = "青"
            }
        if (obj[i].contents == "黄") {
                obj[i].fillColor = "黄"
            }
    }

複数の条件を同時に処理させるには、箇条書きっぽく書けるswitch...case文が楽です。

[例4]

var obj = app.activeDocument.textFrames;

for (var i=0; i<obj.length; i++) {
var objTxt = obj[i].contents;//switch式に使う変数を宣言

switch (objTxt) { //①この変数の値が…
        case objTxt = "赤"://②この値だったら(コロン)
            obj[i].fillColor= "赤";//③こう処理しなさい
            break;//④式から抜ける
        case objTxt = "青":
            obj[i].fillColor= "青";
            break;
        case objTxt = "黄":
            obj[i].fillColor= "黄";
            break;            
    }
    }

②のcase文の行末にはセミコロンではなくコロンを入れるということと、条件の最後にbreakを入れる(④)のを忘れないようにしてくださいね。