ch06 6章中 6章目

ch06 — 三項演算子

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch06 — 三項演算子」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch06 — 三項演算子」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch06 — 三項演算子」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

if / else の 2 分岐を 1 行・1 つの式 で書ける短縮記法が三項演算子 (条件) ? 真の値 : 偽の値 だ。「変数に入れる値を 2 択で決めたい」「関数の引数に渡す値を条件で切り替えたい」のように、文ではなく 値が欲しい 場面で活躍する。たとえば $label = $score >= 60 ? "合格" : "不合格"; のように書けば、if / else を 4 行使わずに 1 行で済む。

PHP 7 で追加された Null 合体演算子 ?? は、三項演算子と似て非なるもの。$a ?? $b は「$anull または 未定義 なら $b、それ以外なら $a」を返す。$_GET['name'] ?? 'guest' のように、配列キーが存在するかどうかをチェックしつつデフォルト値を当てたいときに便利で、三項演算子 + isset() の組み合わせを置き換える定番イディオムだ。「null のときだけ代替値」なのか「falsy 全般で代替値」なのかで ???: を使い分ける。

便利な一方、三項演算子を ネストしすぎると一気に読めなくなる のが落とし穴。$a ? $b : $c ? $d : $e のように連鎖させると、PHP の評価順序の歴史的経緯もあって挙動を読み違えやすい (PHP 8 ではネストに括弧必須に変更された)。2 階層以上ネストしそうになったら、素直に if / elseifmatch 式に戻す方が結果的に読みやすい。短く書ける ≠ 良いコード を肝に銘じる章。

学習目標

  • (条件) ? 真の値 : 偽の値 で if/else を 1 行に書ける
  • 値を 2 択で選ぶ場面で三項演算子を使い分けられる
  • 三項演算子の 使いすぎは可読性を下げる ことを意識する

ドリル

no 内容
01 点数で合格/不合格を 1 行で判定
02 整数の絶対値を ?: で求める

解説スライド 全 7 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. 三項演算子

    Lesson 2 / Chapter 6

  2. if/else を 1 行で書きたい

    「条件で 値を 2 択 から選ぶ」だけのとき、if/else だと冗長:

    <?php
    if ($n >= 60) {
        $result = "合格";
    } else {
        $result = "不合格";
    }
    echo $result . "\n";

    これを 1 行 で書けるのが 三項演算子

  3. (条件) ? 真の値 : 偽の値

    <?php
    $result = ($n >= 60) ? "合格" : "不合格";
    echo $result . "\n";
    • ? の前 = 条件式
    • ? の後 = 真のときの値
    • : の後 = 偽のときの値
    • 全体が 1 つの値 になる → 変数に代入できる

    if/else と同じ動きをコンパクトに書ける。

  4. echo の中に直接書ける

    <?php
    echo (($n >= 60) ? "合格" : "不合格") . "\n";
    • 三項演算子の結果は なので、echo や文字列連結にそのまま使える
    • 全体を ( ) で囲むと演算順序が明確になる
  5. ネストはしない

    <?php
    // 動くが読みにくい (非推奨)
    $s = ($n >= 80) ? "A" : (($n >= 60) ? "B" : "C");
    • 三項演算子の中に三項演算子を入れると 一瞬で読めなくなる
    • ネストしたくなったら 素直に if/elseif/else を使う
    • 三項演算子は「2 択 を 1 行で」のときだけ
  6. 使いどころのまとめ

    シーン 使うべき
    値を 2 択から選ぶだけ 三項演算子
    条件で複数の処理を実行する if/else
    3 つ以上の分岐 if/elseif or switch

    短く書ける = 偉い」ではない。 読みやすさ を優先する。

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

    (条件) ? A : B で値を 2 択で選べる ✅ 三項演算子の結果を変数代入・echo に使える ✅ ネストせず、適切な場面で使い分けられる

    → ドリルへ

1 / 7
📜 スライドを全部一気に読む(縦表示)

Lesson 2 / Chapter 6


if/else を 1 行で書きたい

「条件で 値を 2 択 から選ぶ」だけのとき、if/else だと冗長:

<?php
if ($n >= 60) {
    $result = "合格";
} else {
    $result = "不合格";
}
echo $result . "\n";

これを 1 行 で書けるのが 三項演算子


(条件) ? 真の値 : 偽の値

<?php
$result = ($n >= 60) ? "合格" : "不合格";
echo $result . "\n";
  • ? の前 = 条件式
  • ? の後 = 真のときの値
  • : の後 = 偽のときの値
  • 全体が 1 つの値 になる → 変数に代入できる

if/else と同じ動きをコンパクトに書ける。


echo の中に直接書ける

<?php
echo (($n >= 60) ? "合格" : "不合格") . "\n";
  • 三項演算子の結果は なので、echo や文字列連結にそのまま使える
  • 全体を ( ) で囲むと演算順序が明確になる

ネストはしない

<?php
// 動くが読みにくい (非推奨)
$s = ($n >= 80) ? "A" : (($n >= 60) ? "B" : "C");
  • 三項演算子の中に三項演算子を入れると 一瞬で読めなくなる
  • ネストしたくなったら 素直に if/elseif/else を使う
  • 三項演算子は「2 択 を 1 行で」のときだけ

使いどころのまとめ

シーン 使うべき
値を 2 択から選ぶだけ 三項演算子
条件で複数の処理を実行する if/else
3 つ以上の分岐 if/elseif or switch

短く書ける = 偉い」ではない。 読みやすさ を優先する。


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

(条件) ? A : B で値を 2 択で選べる ✅ 三項演算子の結果を変数代入・echo に使える ✅ ネストせず、適切な場面で使い分けられる

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 ドリル 01 — 点数で合格/不合格 README.md starter.php answer.php
  2. 02 02-abs-value answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — 点数で合格/不合格

問題

標準入力で整数 (点数) を 1 行受け取り、 60 点以上 なら 合格、それ未満なら 不合格 を出力してください。

判定には 三項演算子 ?: を必ず使うこと (if/else は使わない)。

入力例:

75

期待される出力:

合格

ヒント

  • $n = (int) trim(fgets(STDIN)); で整数として読む
  • $result = ($n >= 60) ? "合格" : "不合格";
  • echo $result . "\n";

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(2問)

  1. ドリル 01 — 点数で合格/不合格

    README.md starter.php answer.php

  2. 02-abs-value

    answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます