締切済み

Switch構文について

  • すぐに回答を!
  • 質問No.9610104
  • 閲覧数101
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0
最初にbreakが登場するまでブロック内の処理を実行するということを理解しました。
特定のcaseでのみbreakさせるような場合に、switch構文を使ってみたいです。

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

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

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

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

回答 (全3件)

  • 回答No.1

ベストアンサー率 23% (820/3546)

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

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

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

switch($error_code){
 case 1: logwrite($error_code);
 case 2: echo "ERROR! $error_code";
    break;
 case 3: ExitProcess ();
    exit;
}
お礼コメント
noname#236857
処理に順序がある場合の例ですね。

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

回答ありがとうございました。
投稿日時 - 2019-04-24 18:10:07
  • 回答No.2

ベストアンサー率 17% (124/714)

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

「あれ?break抜けてる」と思われがちです。
お礼コメント
noname#236857
認知されていない構文は、確かに誤解されやすいですね。
自分のプログラムコードが人に見られることも意識して
誤解されないようなプログラムにしたいと思います。

回答ありがとうございました。
投稿日時 - 2019-04-24 18:07:13
  • 回答No.3

ベストアンサー率 64% (662/1023)

他カテゴリのカテゴリマスター
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;を書くべきところで書き忘れたために意図しない動作になってしまうというバグはありがちなので、良し悪しですね。
お礼コメント
noname#236857
プログラムの見やすさの例ですね。

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

回答ありがとうございました。
投稿日時 - 2019-04-24 18:14:22
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ