採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

switch 文

テクノロジ系 / conditional (if / else / switch / 三項)

switch 文

Lesson 2 / Chapter 5

if/elseif が長くなると読みにくい

<?php
if ($n === 1) {
    echo "Mon\n";
} elseif ($n === 2) {
    echo "Tue\n";
} elseif ($n === 3) {
    echo "Wed\n";
} elseif ($n === 4) {
    echo "Thu\n";
}

1 つの値」を「たくさんの候補」と比較する形は、

switch で書くと見通しが良くなる。

switch の基本形

<?php
switch ($n) {
    case 1:
        echo "Mon\n";
        break;
    case 2:
        echo "Tue\n";
        break;
    default:
        echo "unknown\n";
        break;
}
  • switch ($n)判定したい値 を渡す
  • case 1: は「$n が 1 のとき」
  • default: は「どの case にも当たらないとき」

break を忘れると 次の case まで流れる

<?php
switch ($n) {
    case 1:
        echo "Mon\n";
        // break を書き忘れた!
    case 2:
        echo "Tue\n";
        break;
}

$n = 1 のとき、出力は:

Mon
Tue
  • break がないと 次の case も実行される (フォールスルー)
  • これは 初学者の典型バグ
  • case の最後には 必ず break; を書く

default で「それ以外」を受ける

<?php
switch ($grade) {
    case "A":
        echo "Excellent\n";
        break;
    case "B":
        echo "Good\n";
        break;
    default:
        echo "Other\n";
        break;
}
  • default は省略してもよい
  • 省略するとどの case にも当たらない場合 何も実行されない
  • 「想定外を検出したい」なら default を書く

switch を使うべきかどうか

判定したいこと推奨
1 つの値が「特定の候補のどれか」switch
範囲チェック ($n >= 0 && $n <= 100)if
複雑な複合条件 ($a > 0 && $b < 10)if

switch「値の一致」専用 と覚える。

このチャプターでできるようになること

switch で値の多分岐を書ける

✅ 各 case の最後に break を付けられる

default で「それ以外」を受けられる

break 忘れによるフォールスルー事故を防げる

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 01 — 数字を曜日名に変換

問題

標準入力で 1〜7 の整数を 1 行受け取り、

対応する曜日名を出力してください。1-7 以外なら unknown を出力します。

入力出力
1Mon
2Tue
3Wed
4Thu
5Fri
6Sat
7Sun
その他unknown

判定には switch 文を使うこと。

入力例:

3

期待される出力:

Wed

採点

php scripts/grade.php topics/conditional/ch05-switch/drill/01-day-name/

ヒント

  • $n = (int) trim(fgets(STDIN)); で整数として読む
  • switch ($n) { case 1: ... break; ... default: ... }
  • 各 case の最後に break; を忘れない

ドリル 02 — grade を合格/不合格に振り分け

問題

標準入力で grade を 1 行受け取ります。値は A B C D のいずれかです。

C 以上 (= A / B / C) なら passD なら fail を出力してください。

判定には switch 文を使うこと。

ヒント: ABC で同じ処理にしたい場合は、case "A":case "B": を続けて書いて break を省略する書き方が使えます。

入力出力
Apass
Bpass
Cpass
Dfail

入力例:

B

期待される出力:

pass

採点

php scripts/grade.php topics/conditional/ch05-switch/drill/02-grade/

ヒント

  • $grade = trim(fgets(STDIN)); で文字列として読む
  • 複数 case を 1 つの処理にまとめる:
  case "A":
  case "B":
  case "C":
      echo "pass\n";
      break;