スクリプト4(条件判断など)


If文を使った条件判断を使ってみましょう。


◆ If文を使った条件判断

スクリプトの中で条件判断を使うとさらに応用範囲が広がります。「あるプログラムが起動していれば〜を実行する」 などの「〜ならば〜する」という処理が可能になります。

まずはもっとも簡単なIf文を見てみましょう。最も簡単なIf文の構文は次のようになります。

If( expression ) do
    statements
Endif

Ifの後の( )の中に書かれている"expression"のところには条件式が入ります。日本語で言うと「もし〜ならば」の「〜」の部分です。 "statements"のところには"expression"を満たすときに実行するコマンドなどを書きます。ここは複数行でもかまいません。 この文を日本語にすると「もし"expression"ならば"statements"を実行する」になります。またIf文の最後には必ずEndifを書いてください。 IfとEndifは必ずセットになります(doとEndifを書かなくてもいい書き方もありますがややこしい話になるので説明しません)。

例えば次のスクリプト見てみましょう。

Var = 3

If(Var == 3)do
    *Message Var = 3
Endif

最初にVarという変数に3を代入していますね。そしてIf文の条件判断です。Ifの後の( )の中には「Var == 3」と書かれています。 この「==」は代入を意味するのではなく「同じかどうか」を調べる表現です。ここに「Var = 3」と書くのは間違いです。 これは非常に間違いやすいので注意してください。つまりこのIf文では「もし変数Varが3と等しいならば」ということになりますね。 その条件が正しければ「*Message Var = 3」を実行します。正しくなければ実行しません。上のスクリプトではVarは3であり 条件にあっているので正しいとされメッセージが表示されます。ためしにVarに代入する数字を5とかにして実行してみてください。 メッセージは表示されないはずです。


次はもう少し拡張して「もし〜ならば〜を実行し、そうでなければ〜を実行する」というIf文を見てみましょう。 構文は次のようになります。

If( expression ) do
    statements1
Else
    statements2
Endif

"expression"はさっきのものと同じで条件式です。今度は最初のIf文に"Else"が加えられています。この"Else"のあとの"statements2"が "expression"の条件に合わなかったときに実行されるコマンドなどです。つまり日本語で言うと 「もし"expression"ならば "statements1"を実行し、"expression"でなければ "statements2"を実行する」となります。

次のIf文を見てください。

Var = 5

If(Var <= 10)do
    Debug Varは10以下である
Else
    Debug Varは10以下でない
Endif

Varには5を代入しています。Ifのあとの( )の中を見ると「Var <= 10」となっているのでこれは「もしVarが10以下ならば」という意味になります。 「<=」はなんとなくわかると思いますが数学の不等号と同じです。

ところで実行部分に「Debug」とありますがこれは「*Script Debug」の「Debug」です。 実はテキストファイルをスクリプトとして実行するときは*Scriptは書かなくてもいいようになっています。なので省略しました。 もちろん*Scriptと書いてもいいです。ちなみに今まで使ってきた「If」なども「*Script If」の「If」とみなすことができます。 「If」などもBuilt-in コマンドの一種だったんですね。 ただしコマンドリストにスクリプトを書くときは*Scriptが必要です。

このスクリプトを実行すると変数Varの中身は10以下なのでデバッグウィンドウに「Varは10以下である」と表示されます。 ためしにVarに15などの10より大きい値を代入して実行してみてください。「Varは10以下でない」と表示されるはずです。


次はさらに拡張して複数の条件を使ったIf文を見てみましょう。つまり「〜ならば〜し、〜ならば〜し、・・・、どれにも当てはまらなければ〜する」 というIf文です。構文としては次のようになります。

If( expression1 )do
    statements1
Elseif( expression2 )
    statements2
Else
    statements3
Endif

今度は新しく「Elseif」が加わっていますね。「Elseif」のあとには条件式を書きます。これを使うことで複数の条件式を書くことができます。 「Elseif( )」のあとにdoは書かなくてもいいです。 日本語にすると「"expression"ならば "statements1"を実行し、そうでなく "expression2"ならば "statements2"を実行しどの条件にも合わなければ "statements3"を実行する」という感じになります。ちなみに上の構文ではElseifが一つしかないですがいくつでも使えます。

次にスクリプトを見てください。

Var = 4

If(Var == 3)do
    Debug Varは3
Elseif(Var == 4)
    Debug Varは4
Elseif(Var == 5)
    Debug Varは5
Else
    Debug Varは3,4,5以外
Endif

Varには4を代入しています。このスクリプトを実行すると2番目の条件式である「Var == 4」に合うのでそのあとの「Debug Varは4」が実行されます。 ためしに他の数字を代入していろいろ試してみてください。


以上がIf文の基本的な形です。あとは自分が思うとおりの条件に合わせて形を変えて使ってください。


◆ 条件式で使われる記号

If文にはなくてはならない条件式で使われる記号について少し説明します。基本的に条件式で使われるのは比較のための記号です。 これは数学とほぼ同じと考えてもいいです。また同じ意味でも2種類の書き方ができるようになっています。以下にまとめてみます。

記号同じ意味の表現意味
==eq同じである
!=ne同じでない
<lt左辺のほうが小さい
<=le左辺のほうが小さいまたは同じ
>gt左辺のほうが大きい
>=ge左辺のほうが大きいまたは同じ

上の表には2通りの表現方法が書かれています。それぞれの組はまったく同じように扱えます。例えば

If(Var == 4)do


If(Var eq 4)do

と書いても同じです。

この中で注意してほしいのは「==」です。イコールを二つ並べます。同じであることを表現するのに一つのイコール「=」だけを書くと 代入の意味になってしまいます。なのでできれば同じであるかを表現するときはもう一方の表現方法である「eq」を使うようにするといいかもしれません。

あと比較とは違いますが2つまたはそれ以上の条件を同時に満たすときや、いずれか一つを満たせばいいときに使う表現があります。

記号同じ意味の表現意味
& または &&and両方正しい
| または ||orどちらかが正しい

※追記: v4.1以降では「&」や「|」の代わりに「&&」,「||」を使わなければならないようになりました。 詳しくはスクリプト9

これらの記号を二つの条件式ではさみます。例えば条件式"expression1"と"expression2"を同時に満たすときに実行した場合は

If( expression1 & expression2 )do

のように書きます。例えば

Var = 12

If( Var >= 3 & Var <= 20 )do
    Debug Varは3以上20以下
Endif

このスクリプトでは二つの条件式があります。「Var >= 3」と「Var <= 20」です。条件式が「&」をはさんでいるので 「Var >= 3 かつ Var <= 20 ならばデバッグウィンドウを表示」というスクリプトになります。Varは12でどちらの条件も満たすので デバッグウィンドウが表示されます(※v4.1以降では&の代わりに&&を使ってください)。またわかりやすいように条件式を ( ) で囲ってもいいです。

Var = 12

If( (Var >= 3) & (Var <= 20) )do
    Debug Varは3以上20以下
Endif

ただし「&」と「(」がくっつかないようにスペースを入れてください。くっつけてしまうと変数を処理するときの「&(変数)」と間違えられます。 また&をandと書いてもいいです。

「|」や「or」も「and」のときと同じように書きます。どれか一つが条件を満たすとき実行させたいときに使います。


次はIf文と組み合わせると強力な起動しているかどうかを調べる方法について説明します(スクリプト5へ)。


スクリプト3へ  トップへ  スクリプト5へ