HOME > プログラミング > 条件分岐 > 比較対象が一致で●する

switch case swbreak swend default条件分岐 比較対象が一致で●する

 

比較条件と対象条件が合致するとき処理をする分岐命令
複合的条件から真偽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工程」が実行されます。

当サイトコンテンツの複写・転載・引用は禁止しております。