比較条件と対象条件が合致するとき処理をする分岐命令
複合的条件から真偽2通りしか分岐できないif命令と違い、switch命令は比較条件と照合する対象を条件を列挙し、3通り以上の分岐処理ができます。
比較対象にできるものは、「定数」「変数」「関数」「計算式」「直接指定の値や文字列」が指定できます。
対象と比較条件が文字列のときはそれぞれの文字列が完全一致すると一致時の処理に移ります。
switch 比較条件
case 対象条件A : 一致時の処理A : swbreak
case 対象条件B : 一致時の処理B : swbreak
...
swend
switch gettime(2) //今日の曜日を値で返す関数
case 0 : mes "日曜日" : swbreak //0のとき「日曜日」
case 1 : mes "月曜日" : swbreak //1のとき「月曜日」
case 2 : mes "火曜日" : swbreak //2のとき「火曜日」
case 3 : mes "水曜日" : swbreak //3のとき「水曜日」
case 4 : mes "木曜日" : swbreak //4のとき「木曜日」
case 5 : mes "金曜日" : swbreak //5のとき「金曜日」
case 6 : mes "土曜日" : swbreak //6のとき「土曜日」
swend
マクロ名:switch「比較条件は」
比較条件:gettime(2)「今日の曜日の値」
マクロ名:case「対象条件が」
対象条件:0「0で一致するとき」
一致時の処理:mes "日曜日"「日曜日と表示する」
マクロ名:swbreak「以降一致時の処理に移らない(swendへ移る)」
...
マクロ名:swend「比較終了(switch命令の終了)」
一致時の処理を複数書くときは、展開形で書くと分かりやすくなります。
switch 比較条件
case 対象条件A
一致時の処理A1
一致時の処理A2
swbreak
case 対象条件B
一致時の処理B1
一致時の処理B2
swbreak
...
swend
switch gettime(2) //今日の曜日を値で返す関数
case 0 //gettime(2)が0のとき
mes "日曜日は"
mes "ランラランラランラン♪"
swbreak
case 1 //gettime(2)が1のとき
mes "月曜日は"
mes "ウンジャラゲ"
swbreak
case 2 //gettime(2)が2のとき
mes "火曜日は"
mes "ハンジャラゲ"
swbreak
case 3 //gettime(2)が3のとき
mes "水曜日は"
mes "スイスイスイ"
swbreak
case 4 //gettime(2)が4のとき
mes "木曜日は"
mes "モ~リッモリ"
swbreak
case 5 //gettime(2)が5のとき
mes "金曜日は"
mes "キンキラキン"
swbreak
case 6 //gettime(2)が6のとき
mes "土曜日は"
mes "ギンギラギンのギン!"
swbreak
swend
対象条件がどれも一致しないときだけ処理をしたいとき
全ての対象条件(case命令)に当てはまらなかった時の分岐条件は、全てのcase命令の後にdefault命令を使います。
defaultは対象条件に当てはまらなかった時なので、対象条件は書けません。
switch 比較条件
case 対象条件A : 一致時の処理A : swbreak
case 対象条件B : 一致時の処理B : swbreak
default : 全対象条件に一致しなかった時の処理 : swbreak
swend
switch gettime(2) //今日の曜日を値で返す関数
case 0 : mes "日曜ダイヤで運行" : swbreak //0のとき処理
case 6 : mes "土曜ダイヤで運行" : swbreak //6のとき処理
default : mes "平日ダイヤで運行" : swbreak //0と6以外のとき処理
swend
複数の対象条件で共通の処理をするとき
一度対象条件に一致すると、以降swbreak命令またはswend命令までに列挙された他の対象条件の一致時の処理は無条件に全て実行されます。これをフォールスルーと言います。
この仕組みを利用して複数の対象条件で同じ処理を行いたいときは、一致時の処理の順番に問題なければ対象条件毎に処理を網羅する必要がなくなります。
switch 比較条件
case 対象条件A
case 対象条件B : 一致時の処理AB : swbreak
default : 全対象条件に一致しなかった時の処理 : swbreak
swend
switch gettime(2) //今日の曜日を値で返す関数
case 0
case 6 : mes "休日ダイヤで運行" : swbreak //0と6のとき処理
default : mes "平日ダイヤで運行" : swbreak //0と6以外のとき処理
swend
すなわち、今日が日曜(0)と土曜(6)のとき、「休日ダイヤで運行」を表示し、それ以外の曜日のときは「平日ダイヤで運行」を表示します。
sdim task : task = "C" //文字列型変数taskを宣言しCを代入
switch task //比較条件はC
case "A" : mes "A工程" //一致しないので処理しない
case "B" : mes "B工程" //一致しないので処理しない
case "C" : mes "C工程" //一致するので処理する
case "D" : mes "D工程" //swbreakされていないので処理する
case "E" : mes "E工程" //swbreakされていないので処理する
swend //switch分岐処理の終了
すなわち、「C工程」「D工程」「E工程」が実行されます。
Copyright © 2002-2025 team.Dakuji All Rights Reserved.