条件分岐

if / else / switch — 条件で処理を切り分ける

入力や計算結果に応じて処理を切り替える「条件分岐」を扱うトピック。判定の道具 (比較演算子・論理演算子) もここで揃える。

このトピックで身につくこと

  • if / else / elseif で 2 分岐・多分岐を書き分けられる
  • 比較演算子 (== != < > <= >=) を使い分けられる
  • 論理演算子 (&& || !) で複数条件を組み合わせられる
  • switch で値の多分岐を書ける
  • 三項演算子 ? : で短い 2 択を 1 行にできる

前提知識の要点

このトピックは hello の echo / 変数 / 数値 / 入力の知識を前提にする。要点だけ:

<?php
// 文字を出す (\n は改行。ダブルクォート必須)
echo "OK\n";

// 変数に値を入れる
$n = 10;

// 標準入力を整数で受け取る
$n = (int)trim(fgets(STDIN));

// 数値の余り (偶数判定の準備)
echo $n % 2;   // 0 なら偶数
▶ 3v4l で実行
やりたいこと 書き方
画面に出す echo "...";
変数に保存 $x = 値;
入力 (整数) $n = (int)trim(fgets(STDIN));
偶数判定 $n % 2 (0 なら偶数)

これで OK。詳しくやりたければ hello トピックへ。

chapter 一覧

# chapter 内容 学習目標
1 ch01-if/ if 単独 条件が真のときだけブロックを実行できる
2 ch02-if-else/ if / else / elseif 2 分岐・3 分岐以上に書き分けられる
3 ch03-comparison/ 比較演算子 == != < > <= >= を使い分けられる
4 ch04-logical/ 論理演算子 && \|\| ! で複数条件を組み合わせられる
5 ch05-switch/ switch 文 値の多分岐を switch で書ける
6 ch06-ternary/ 三項演算子 ? : で if/else を 1 行に書ける

合計 6 chapter / 15 drill / 所要 1.5〜2 時間

進め方

  1. 各 chapter の slide.md を読む (4〜5 分)
  2. drill/ 配下の問題を順番に解く
  3. 採点: php scripts/grade.php topics/conditional/<chapter>/drill/<drill>/

つまづきポイント

症状 多くの原因
if ($x = 10) が常に真になる = は代入。比較は == を使う
switch の case が全部実行される 各 case の最後に break; を入れていない
if (...) の中身が動かない 条件が偽になっている → var_dump($x) で値を確認
&&\|\| の動きが直感と違う && は両方真、\|\| はどちらか真。日本語の「かつ/または」と対応させる
入力との比較で常に偽 入力は文字列。(int) でキャストしてから比較する

関連トピック

トピック 関係
hello このトピックの前提 (echo / 変数 / 数値 / 入力)
loop 条件分岐とループを組み合わせて使う
function 条件分岐を関数の中で使う
db SQL の WHERE 句は条件式そのもの
exception try/catch は例外専用の条件分岐

トピックを並列で参照する全体地図は TOPICS_INDEX.md にある。

案件 (dojo_map.tsv) での参照

topic_slug     chapter_dir
conditional    topics/conditional/ch01-if
conditional    topics/conditional/ch02-if-else
conditional    topics/conditional/ch03-comparison
...

slug conditional で参照可。02-conditional / conditional どちらの path でもアクセスできる (シンボリックリンク)。

このレッスンの章

  1. ch01 ch01 — if 単独
  2. ch02 ch02 — if / else
  3. ch03 ch03 — 比較演算子
  4. ch04 ch04 — 論理演算子
  5. ch05 ch05 — switch 文
  6. ch06 ch06 — 三項演算子

スクール現場で詰まる「よくある落とし穴」

公式マニュアルには書かれていないけれど、講師として受講生がよくハマるポイントを並べました。

  1. elseif と else if の違い

    どちらも動くが `elseif` 1語が公式推奨。コーディング規約(PSR-12)も elseif

  2. switch で break を忘れる

    break がないと次の case に処理が流れ落ちる。意図的な fall-through ならコメントで明示する

  3. for ループのカウンタを foreach で書きたい誘惑

    配列を回すだけなら foreach。インデックスが欲しい時だけ `foreach ($arr as $i => $v)`