こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Switch構文について

最初にbreakが登場するまでブロック内の処理を実行するということを理解しました。
特定のcaseでのみbreakさせるような場合に、switch構文を使ってみたいです。

サンプルプログラムを作ってみて、構文の理解を深めているのですが
「特定のcaseでのみbreakさせる」例が思いつきません。
実際どのような場合にこの構文を使いたくなりますでしょうか。
(caseのたびに、必ずbreakさせるのであれば、if構文を使いたくなる)

想定しているイメージは
ある条件がととのった場合は下記の処理を実行する。
 処理(1)→処理(2)→処理(3)→処理(4)

別の条件がととのった場合は下記の処理を実行する。
 処理(2)→処理(3)→処理(4)

※OKWAVEより補足:「Webシステム開発」についての質問です。

投稿日時 - 2019-04-24 15:21:25

QNo.9610104

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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;を書くべきところで書き忘れたために意図しない動作になってしまうというバグはありがちなので、良し悪しですね。

投稿日時 - 2019-04-24 18:08:40

お礼

プログラムの見やすさの例ですね。

たしかに、同じ処理を単純にif構文で記載すると
見やすさが違いますね。

回答ありがとうございました。

投稿日時 - 2019-04-24 18:14:22

ANo.2

あまり「最初にbreakが登場するまでブロック内の処理を実行する」ということが認知されていないというか、見たときに誤解されやすいので
「必ずbreakにてブロックを抜ける」としたほうが見やすいし、
誤解も避けられます。

「あれ?break抜けてる」と思われがちです。

投稿日時 - 2019-04-24 16:28:52

お礼

認知されていない構文は、確かに誤解されやすいですね。
自分のプログラムコードが人に見られることも意識して
誤解されないようなプログラムにしたいと思います。

回答ありがとうございました。

投稿日時 - 2019-04-24 18:07:13

ANo.1

エラーコード1の場合はログに保存しメッセージを出力する
エラーコード2の場合はメッセージを出力する
エラーコード3の場合は終了処理をしてプログラムを停止

もちろんifでもかけますが、今後エラーコードが増えた場合ならこちらのほうが楽です

※あまりいい例えができていない自覚はあるのですがここまで書いてしまって悔しいのでそのまま投稿させてください

switch($error_code){
 case 1: logwrite($error_code);
 case 2: echo "ERROR! $error_code";
    break;
 case 3: ExitProcess ();
    exit;
}

投稿日時 - 2019-04-24 16:18:38

お礼

処理に順序がある場合の例ですね。

たしかに、エラー時の処理の順序が大事な場合は
ifではなくswitchを使いたくなりますね。

回答ありがとうございました。

投稿日時 - 2019-04-24 18:10:07