# 条件分岐/繰り返し

マニュアル > スクリプトガイド > スクリプトVer2(SC2構文) > # 条件分岐/繰り返し |

条件ステートメント/繰り返しステートメント

スクリプトで使用できる制御ステートメントについて説明します。

| 各ステートメントの構文はC言語にほぼ準拠しています。

条件ステートメント(if-else)

▪if文
if文を使うと、条件式の判定によってスクリプトを実行するかどうかを切り替えることができます。条件式の判定はブール値で行われ、判定がTRUEの時にブランケットで囲まれたスコープ内のスクリプトが実行されます。なお、スクリプトが1行だけの場合はブランケットを省略することができます。

if ( <条件式> ) { <スクリプト>; }

▪if-else文
if-else文は、条件式の判定によってスクリプト1又はスクリプト2のどちらかを実行するように処理の流れを分岐させる事ができます。判定結果がTRUEの時にスクリプト1が実行され、FALSEの時にスクリプト2が実行されます。なお、各スクリプトが1行だけの場合はブランケットを省略することができます。

if ( <条件式> ) { <スクリプト1>; } else { <スクリプト2>; }

▪if- else if - else if - else文
if- else if - else if - ... - else文は、複数のelse if文と最後のelse文で構成されます。最後のelse文はオプションで必要がなければ記述しなくてもかまいません。上から下の順で条件式の評価が行われ、条件がTRUEになったスコープ内のスクリプトが実行されます。すべての条件を評価後、いずれの条件もTRUEでない場合には最後のelseに記述したスクリプトが実行されます。なお、各スクリプトが1行だけの場合はブランケットを省略することができます。

if ( <条件式> ) { <スクリプト1>; } else if ( <条件式> ) { <スクリプト2>; } else { <スクリプト3>; }

if文の使用例は以下のとおりです。

例１) 条件式に式やメソッドを含めた例

    if (a == 1 || (b > d * 123) && ::GetVal("TAG01"))
    {
     ::WriteVal("TAG01", 1);
    }
    else
    {
     ::WriteVal("TAG01", 2);
    }

例２）スクリプトが１行のときはブランケットを省略できる

    if (a == 1) ::WriteVal("TAG01", 1);

例３）各ステートメントが１行のときもブランケットを省略できる

    if (a == 1)
     ::WriteVal("TAG01", 1);
    else  if (a == 2)
     ::WriteVal("TAG01", 2);
    else  if (a == 3)
     ::WriteVal("TAG01", 3);
    }

条件ステートメント(switch-case)

switch文もif文と同様に条件式による処理の分岐が行えます。

条件式の多い多分岐の処理をシンプルに記述できます。switch文では<式>と<値>が一致したスクリプトが実行されます。条件値は「case」の後ろに記述し、行末に「:」を一文字書きます。続いてスクリプトを記述し、処理のブロックの最後にはbreakキーワードを書きます。スクリプトは複数行記述することも可能です。

また、いずれの条件も満足しなかった時の処理として、<デフォルトスクリプト>を記述することができます。<デフォルトスクリプト>は省略することもできます。

switch ( <式> ) { case <値1>: <スクリプト１>; break; case <値1>: <スクリプト2>; break; ..... case <値n>: <スクリプトn>; break; default: <デフォルトスクリプト>; }

例）

    switch (a)
    {
     case 1:
      b = ::GetVal("TAG01");
      break;
     case 2:
      b = ::GetVal("TAG02");
      break;
     case 3:
      b = ::GetVal("TAG03");
      break;
    }

繰り返しステートメント(while)

while文は、条件式がTRUEの間スクリプトを繰り返し実行します。スクリプトが1行だけの時はブランケットを省略することができます。

while ( <条件式> ) { <スクリプト>; }

▪breakキーワード
繰り返し処理の実行中に、スクリプトの途中でループを抜けたい時にはbreakキーワードを用います。breakキーワードは任意の場所で使うことができます。breakは複数個書くこともできます。通常if文と組み合わせて記述し、if条件がTRUEになった時にbreakを呼びだすようにします。

while ( <条件式1> ) { <スクリプト1>; if ( <条件式2> ) break; <スクリプト2>; if ( <条件式3> ) break; <スクリプト3>; }

▪continueキーワード
繰り返し処理の実行中に、途中でループの先頭に戻って実行したい場合には、continueキーワードを用います。continueキーワードは任意の場所で使うことができます。continueは複数個書くこともできます。通常ifと組み合わせて記述し、if条件がTRUEになった時にcontinueを呼びだすようにします。continueが呼び出されるとwhile条件が評価され、TRUEであればブランケット内のスクリプトの先頭に戻って処理が実行されます。

while ( <条件式1> ) { <スクリプト1>; if ( <条件式2> ) continue; <スクリプト2>; if ( <条件式3> ) continue; <スクリプト3>; }

尚、breakキーワードとcontinueキーワードは混在させて使用する事もできます。

例１)ブランケット内のスクリプトは100回実行されます。

    var a = 0;
    while (a < 100)
    {
     a = a + 1;
    }

例２)条件成立時にbreakで処理を抜けます。

    var a = 0;
    while (1)
    {
     a = a + 1;
     if (a == 100) break;
    }

繰り返しステートメント(for)

for文は、while文と同じように条件式がTRUEの間スクリプトを繰り返し実行します。

while文と異なる点は<初期化式>と<再初期化式>です。<初期化式>はfor文を評価する前に1度だけ実行されるもので、通常はループ条件判定のための変数初期化に用います。<再初期化式>はブランケット内のスクリプトが最後まで実行された後に呼び出されるもので、ループ条件のカウンタ変数をカウントアップする際などに使用します。

なお、<初期化式>と<再初期化式>にはなにも書かずに省略することもできます。また、while文と同じようにbreak/continueキーワードを使用することが可能であり、スクリプトが1行だけの時はブランケットを省略することもできます。

for ( <初期化式> ; <条件式> ; <再初期化式> ) { <スクリプト>; }

for文の処理順序は下記のとおりです。

1)<初期化式>

2)<条件式>でもしTRUEなら<スクリプト>を実行、FALSEなら終了

3)<再初期化式>

4)<条件式>がFALSEになるまで2と3を繰り返す

例）スクリプトを10回繰り返して実行する例

    for (var i = 0; i < 10; i = i + 1)　// iは0,1,2...と変化する。
    {
     //<スクリプト>;
    }

例）同様に、スクリプトは10回実行される

    for (var i = 0; i < 20; i = i + 2)　// iは0,2,4...と変化する。
    {
     //<スクリプト>;
    }