自分がプログラミングを学習し初めの頃に思っていた疑問に答えますw
当時、条件分岐を作るif文とswitch文って書き方が違うけど、どういうふうに使い分けるんだろう?と思っていました。今は自分の中ではっきり使い分けています。1つの意見として初心者の方の参考になれば幸いです。
サンプルコードではC# を使用しています。
switch文を使う時
私の考え方は、以下に挙げた「switchを選択する理由」がない場合にif文を選択しています。
switchを選択する理由:「ifより短くなる、みやすくなる場合」に選択
具体的には
(A)1つの判定したい値について、3つ以上に分岐をしたいとき。
(B)フォールスルーを使って2つ以上の条件で同じ処理にしたいとき
以上のいずれかに合致する場合にswitchを検討します。当てはまったとしても絶対使うわけじゃないんですが…
以下は(A)にも(B)にも当てはまる好例です。
switchとenumは相性がいい組み合わせです。if文だと「elseif(type == 〜)」がしつこく続いてしまいますが、さっぱり書けますね。
また、フォールスルーを活用したい時は特に使いたいです。フォールスルーは流れ落ちるというような意味で、caseを連続で書くことで、複数の値で同じ処理をする場合に明らかにifよりも読みやすく書けます。
enum Linetype
{
None,
New,
Add,
Edit,
Delete,
// ↑小技:最後の要素にも「,」をつけておくと、後ろに項目を追加するときに忘れなくて便利
}
// 編集可能な行の状態によって背景色を変えるときに使うイメージのメソッド
Color GetBgColor(Linetype type)
{
// 途中でreturnで抜けるので、1つもbreakが無い例になってしまいましたが、
// (A)の3つ以上に分岐している
switch (type)
{
case Linetype.None:
return Color.White;
case Linetype.New:
case Linetype.Add:
case Linetype.Edit:
// (B)フォールスルーを使い複数の条件について処理している
return Color.Yellow;
case Linetype.Delete:
// 削除行は灰色で…というああいう感じの
return Color.Gray;
default:
return Color.White;
}
}
switch文を使わない時にif文を使う
switchじゃないときはifを使っています。というか大抵if文を使うことが多いです。
必然的にbool値(マルかバツか)で判定するときはifを使います。
年齢とか幅を判定したいときはifです。