- 締切済み
Switch構文について
最初にbreakが登場するまでブロック内の処理を実行するということを理解しました。 特定のcaseでのみbreakさせるような場合に、switch構文を使ってみたいです。 サンプルプログラムを作ってみて、構文の理解を深めているのですが 「特定のcaseでのみbreakさせる」例が思いつきません。 実際どのような場合にこの構文を使いたくなりますでしょうか。 (caseのたびに、必ずbreakさせるのであれば、if構文を使いたくなる) 想定しているイメージは ある条件がととのった場合は下記の処理を実行する。 処理(1)→処理(2)→処理(3)→処理(4) 別の条件がととのった場合は下記の処理を実行する。 処理(2)→処理(3)→処理(4) ※OKWAVEより補足:「Webシステム開発」についての質問です。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- _kappe_
- ベストアンサー率68% (1583/2308)
switchだとこんな書き方ができます。ifでも同じことはできますが、この場合はこちらのほうが見やすいと思います。 switch (n) { case 1: case 2: case 4: case 6: do_this(); break; case 0: case 3: do_that(); break; default: print_error(); break; } switch中でbreak;を書くべきところで書き忘れたために意図しない動作になってしまうというバグはありがちなので、良し悪しですね。
- maiko04
- ベストアンサー率17% (345/1956)
あまり「最初にbreakが登場するまでブロック内の処理を実行する」ということが認知されていないというか、見たときに誤解されやすいので 「必ずbreakにてブロックを抜ける」としたほうが見やすいし、 誤解も避けられます。 「あれ?break抜けてる」と思われがちです。
お礼
認知されていない構文は、確かに誤解されやすいですね。 自分のプログラムコードが人に見られることも意識して 誤解されないようなプログラムにしたいと思います。 回答ありがとうございました。
エラーコード1の場合はログに保存しメッセージを出力する エラーコード2の場合はメッセージを出力する エラーコード3の場合は終了処理をしてプログラムを停止 もちろんifでもかけますが、今後エラーコードが増えた場合ならこちらのほうが楽です ※あまりいい例えができていない自覚はあるのですがここまで書いてしまって悔しいのでそのまま投稿させてください switch($error_code){ case 1: logwrite($error_code); case 2: echo "ERROR! $error_code"; break; case 3: ExitProcess (); exit; }
お礼
処理に順序がある場合の例ですね。 たしかに、エラー時の処理の順序が大事な場合は ifではなくswitchを使いたくなりますね。 回答ありがとうございました。
お礼
プログラムの見やすさの例ですね。 たしかに、同じ処理を単純にif構文で記載すると 見やすさが違いますね。 回答ありがとうございました。