
今回はswitch文について書きます。
switch分はif分と同じで条件分岐する時に使います。
どう言う時に使うと便利かと言うと、条件がいっぱいある時に使うと便利なのかなって思います。
例えばif文で条件がたくさんあって処理を分岐させたい時はこう書きます。
今回は成績(grade)を5段回評価した時の成績に応じて結果を表示させました。
if文をまだ習っていない人はこちらも合わせて読んで見て下さい。
https://mayugezio.com/started/if/
var grade = 1
if grade == 5 {
print("将来有望です")
} else if grade == 4 {
print("優秀です")
} else if grade == 3 {
print("まぁまぁです")
} else if grade == 2 {
print("おかんに怒られます")
} else if grade == 1 {
print("おかんに諦められます。")
} else {
print("...")
}
// 結果 おかんに怒られます
結構めんどくさいし、else ifばっかりでちょっと見にくかったりもします。
なのでこう言う場合、switch文の登場です。
上記のコードをswitch文で書くとこうなります。
switch grade {
case 5:
print("将来有望です")
case 4:
print("優秀です")
case 3:
print("まぁまぁです")
case 2:
print("ちょっとやばいです")
case 1:
print("やばい")
default:
print("...")
}
パッと見ではそこまで楽になった感じはしませんが、条件ごとに変数と比較しないですむので実際書いてみると楽に感じると思います。
switch 値や式や変数名 {
case 値:
//実行したい処理
case 値:
//実行したい処理
case 値:
//実行したい処理
case 値:
//実行したい処理
case 値:
//実行したい処理
default:
//caseで指定した値以外だった場合に実行したい処理
}
switchの後に「値」や「変数名」など比較元を書きます。
続いてcaseで比較元と比較したい「値」や「変数名」を書いて、その下に実行したい処理を書きます。
12行目のdefaultはどのcaseにも当てはまらない時に実行したい処理を書きます。
defaultは書かないとエラーになるので必ず書かないといけません。
var testScore = 29
switch testScore {
case 95,96,97,98,99,100: // 複数ある場合カンマ区切り
print("将来有望です")
case 80...94:
print("高得点です")// ...で範囲指定できる
case 60..<80:
print("まぁまぁです")// ..<で含まない(今回の場合80は含まない)
case 50:
print("ちょっとやばいかも")//出力した後に
fallthrough //処理を終わらせないで、すぐ下のcaseも出力される
case 40:
print("赤点ギリギリです。")//上の処理でここも一致するので、二つ出力される。
case let red where red < 40://定数を作って、もしredが40より小さい場合
print("赤点です")
default:
break
}
こんな書き方もできます!var testScore
の数字を書き換えて実行結果がどう変化するか確認してみて下さい。
9行目までは特に説明しなくてもわかると思います。
10行目の説明をします。
12行目のようにfallthroughと書けば、一つ下のcaseの処理も実行させる事ができます。
今回の場合13行目も処理されるので、「ちょっとやばいかも」と「赤点ギリギリです。」が表示されます。
あまり使う機会がないかもしれませんがこう言う事もできるんだなって感じで覚えておくと良いかもしれません。
17行目もあまり使わないかもしれませんが、caseの中で定数などを宣言して比較演算子を使って比較する事もできます。
今回の場合は40点未満だと「赤点です」になります。
最後にdefaultですが、何も処理をしたくない場合、breakとすれば処理をしないで終了できます。
他にも応用ができますが今回は基本的な部分だけで終わりにします。
暗記しようとせず実際に使っていけばすぐに覚えれますので自分なりに試してみるのが良いと思います。
ありがとうございました。
fallthroughの説明が間違えてますね。
fallthroughを使うと一つ下のcaseを実行できます。
条件に合っていなくても実行されます。
ご指摘ありがとうございます!
その通りですね。助かりましたm(_ _)m
記事の内容を修正しました!
コメントくれて本当にありがとうございました!