条件分岐 |
1.if文 |
プログラミングでは「もし〜であれば処理を実行させるが、そうでなければ実行させたくない」ということが頻繁にあります。これは以下のように書きます。
if 条件式 { 処理 }
条件が成り立てば処理("{"と"}"の間の部分)を実行し、成り立たなければ何もしません。
処理の部分は字下げして書きます。そうすることによって条件が成り立っている時に実行されるのがどの部分なのか一目で分かります。
if a == 3 { mes "aは3です" }
もし変数aの値が3ならばmes "aは3です"を実行します。"=="(半角のイコール2つ)は「等しい」を意味します。
処理の部分が1行しかない場合は
if a == 3 { mes "aは3です" }
のように書くと、よりスマートに見えるかと思います。
if a != 3 { mes "aは3ではありません" }
「もしaが3ではないならば〜」です。
if a >= 3 { mes "aは3以上の数です" }
「もしaが3以上ならば〜」です。プログラムでは"≧"を">="と書きます。
a == b | aとbが等しい |
a != b | aとbが等しくない |
a > b | aがbより大きい |
a < b | aがbより小さい |
a >= b | aがb以上 |
a <= b | aがb以下 |
例.西暦○○○○年はうるう年か?
nen = 2000 uruu_f = 0 if nen \ 4 == 0 { uruu_f = 1 } if nen \ 100 == 0 { uruu_f = 0 } if nen \ 400 == 0 { uruu_f = 1 } if uruu_f == 1 { mes "西暦" + nen + "年はうるう年です" } if uruu_f == 0 { mes "西暦" + nen + "年はうるう年ではありません" }
西暦何年であるかを変数nenに代入します。
ある数がある数の倍数かどうかを調べるには"\"を使います。"\"は「余り」を求めます。a \ b(aをbで割った余り)が0の時、aはbの倍数です。
変数uruu_fは、うるう年であるならば1、うるう年でないならば0を入れます。uruu_fのfは"flag"の略です。このように、○○であれば1、○○でなければ0を入れて状態を識別するものをフラグといいます。
条件が成り立てばuruu_fの値が変更され、成り立たなければそのままである点に注意してください。例えば"nen = 2013"とした場合、最初にuruu_fに0が代入され、以降の3つの条件式はいずれも成り立たないので0のままです。"nen = 2016"とした場合、"nen \ 4 == 0"が成り立ちuruu_fが1に変更されますが、あとの2つの条件式は成り立たないので1のままです。
"+"を文字列に対して使った場合には「連結」の意味になります。"+"の左の文字列と右の文字列または数値をつなげて一つの文字列にします。
"西暦" + nen + "年はうるう年です"
↓
"西暦2000" + "年はうるう年です"
↓
"西暦2000年はうるう年です"
2.if 〜 else 〜 |
もし条件が成り立っていれば処理1を実行し、成り立っていなければ処理2を実行する場合には次のように書きます。
if 条件式 { 処理1 } else { 処理2 }
if a >= 3 { mes "aは3以上の数です" } else { mes "aは3未満の数です" }
先ほどの
if uruu_f == 1 { mes "西暦" + nen + "年はうるう年です" } if uruu_f == 0 { mes "西暦" + nen + "年はうるう年ではありません" }
は
if uruu_f == 1 { mes "西暦" + nen + "年はうるう年です" } else { mes "西暦" + nen + "年はうるう年ではありません" }
のようにも書けます。
3.かつ、または |
if 条件式1 & 条件式2 { 処理 }
これは、条件式1が成り立ち、かつ、条件式2が成り立っている時に処理を実行します。
条件式が成り立つことを「条件式が真である」といいます。条件式が成り立たないことを「条件式が偽である」といいます。
つまり、条件式1と条件式2が両方とも真の時に処理を実行します(「条件式1 & 条件式2」も条件式ですから、これが真になります)。
if a >= 5 & a <= 8 { mes "aは5以上8以下です" }
「もしaが5以上かつ8以下ならば」です。
"&"を論理積(AND)といいます。
if 条件式1 | 条件式2 { 処理 }
これは、条件式1が成り立っているか、または、条件式2が成り立っている時に処理を実行します。
つまり、条件式1と条件式2のうち少なくともどちらかが真の時に「条件式1 | 条件式2」が真になります。"|"を論理和(OR)といいます。
if a < 10 | a > 20 { mes "aは10より小さいか、20より大きいです" }
「もしaが10より小さいか、または20より大きいならば」です。
"&"を2つ以上使うこともできます。
if a >= 5 & a <= 8 & b == 1 { mes "条件式は真です" }
3つの条件式がすべて真の時、処理を実行します。
"|"も同様です。
if b == 1 | a >= 5 & a <= 8 { mes "条件式は真です" }
このように"&"と"|"を混ぜて使う場合は注意してください。左から順に評価され(確かめられ)ます。つまり
if (b == 1 | a >= 5) & a <= 8 { mes "条件式は真です" }
と同じ意味になります。「a >= 5 & a <= 8」を先に評価させたいのであれば
if b == 1 | (a >= 5 & a <= 8) { mes "条件式は真です" }
とする必要があります。
4.switch文 |
if a == 1 { mes "aは1です" } if a == 2 { mes "aは2です" } if a == 3 { mes "aは3です" }
のように、変数の値によって処理が別れる場合、switch文を使うとスマートな形になります。
switch 変数名 case 値: 処理1 swbreak case 値: 処理2 swbreak ・ ・ ・ swend
変数に入っている値と、各caseの値を比べて、一致したら該当する処理を行います。
switch a case 1: mes "aは1です" swbreak case 2: mes "aは2です" swbreak case 3: mes "aは3です" swbreak swend
「aが1なら〜、2なら〜、3なら〜」といった単純な比較の場合だけで、「aが3以上なら〜」や「aが3未満なら〜」といった場合はswitch文は使えません。
swbreakはswitch〜swendから抜け出すものです。ないとその下の処理まで実行されてしまいます。逆にこの性質を利用して
switch a case 1: case 2: mes "aは1か2です" swbreak case 3: mes "aは3です" swbreak swend
のような書き方もできます。aが1の時"case 1:"には何も処理がなく、swbreakもないので結局mes "aは1か2です"が実行されることになります。