導入
プログラミングにおいて、特定の変数に対して「値がこれならこの処理、あれならその処理」と条件分岐を行う場面は非常に多いです。if文を連ねることも可能ですが、条件が多くなるとコードが読みづらくなります。そこで活躍するのがswitch文です。本記事では、switch文の心臓部である「caseラベル」の基本から、現場で役立つ注意点までを解説します。
基礎知識
caseラベルとは、switch文の中で「どの値と一致するか」を定義するための目印です。
switch文に渡された変数(評価式)と、各caseラベルに記述された定数が一致した場合、その直後のコードブロックが実行されます。ここで重要なのは、caseラベルに指定できるのは「定数(コンパイル時に値が確定するもの)」でなければならないという点です。また、各処理の最後には、意図しない後続のcase処理まで実行されるのを防ぐためにbreak文を置くのが一般的です。
実装/解決策
caseラベルを正しく記述する際のポイントは以下の3点です。
1. 定数のみを使用する:変数や関数呼び出しの結果は指定できません。
2. break文を忘れない:breakがないと、次のcaseへ処理が流れ込む「フォールスルー」が発生します。
3. defaultラベルの活用:どのcaseにも当てはまらなかった場合の処理(エラーハンドリングなど)を記述します。
サンプルプログラム
以下のコードは、ステータスコードを判定するシンプルな例です。コピー&ペーストして動作を確認してみてください。
include
int main() {
int status = 200;
switch (status) {
case 200:
std::cout << "成功: 処理が完了しました。" << std::endl;
break; // ここで終了しないと次のcaseも実行される
case 404:
std::cout << "エラー: リソースが見つかりません。" << std::endl;
break;
case 500:
std::cout << "エラー: サーバー内部で問題が発生しました。" << std::endl;
break;
default:
// どのcaseにも一致しない場合のデフォルト処理
std::cout << "不明なステータスコードです。" << std::endl;
break;
}
return 0;
}
応用・注意点
現場でよくある失敗として、breakの書き忘れによるバグが挙げられます。意図的に複数のcaseで同じ処理をさせたい場合(例:case 1: case 2: 共通処理; break;)は別ですが、基本的には各caseの末尾にbreakを入れる癖をつけましょう。
また、caseラベルには「定数式」しか書けないため、実行時に計算される値で分岐したい場合は、switch文ではなくif-else文を使用する方が適切です。状況に応じてこれらの制御構造を使い分けることが、可読性の高いコードを書くための第一歩となります。

コメント