ch04 6章中 4章目

ch04 — 論理演算子

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

概要

実際の条件は「年齢が 18 以上 かつ 会員登録済み」のように、複数の真偽値を組み合わせて判定したい場面がほとんど。これを表現するのが論理演算子で、&& (and: 両方が真) / || (or: どちらかが真) / ! (not: 真偽を反転) の 3 つを覚える。比較演算子で作った $age >= 18 のような小さな条件を、論理演算子で接着して大きな条件を組み立てるイメージ。

論理演算子のもう 1 つの重要な性質が 短絡評価 (short-circuit) だ。A && BA が偽の時点で結果が偽に確定する ので、PHP は B を評価しない。同じく A || B は A が真の時点で B は評価されない。これを利用して、if ($user !== null && $user->isAdmin()) のように「左でガードしてから右で本処理」と書くと、null 参照エラーを避けられる。逆に「右側に副作用があるコード」を書くと、左の結果次第で実行されたりされなかったりして、思わぬバグになる。

PHP には && || の他に キーワード版and or も存在する。一見同じに見えるが、&&and演算子の優先順位が違う。たとえば $a = true && false$afalse になるが、$a = true and false$atrue になる (= より and が弱いため代入が先)。歴史的事情で残っているが、現代のコードでは混乱を避けるため && || を使うのが鉄則だ。

学習目標

  • && (and) で「両方が真」を判定できる
  • || (or) で「どちらかが真」を判定できる
  • ! (not) で真偽を反転できる

ドリル

no 内容
01 && で「0 以上 かつ 100 以下」を判定
02 \|\| で「Sat または Sun」を判定
03 ! で「偶数ではない」を判定

解説スライド 全 7 枚

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

  1. 論理演算子

    Lesson 2 / Chapter 4

  2. 複数の条件を組み合わせたい

    「年齢が 18 以上 かつ 65 未満」のように、 条件を 2 つ以上つなげて判定したい ことがある。

    これまでの書き方:

    <?php
    if ($age >= 18) {
        if ($age < 65) {
            echo "現役世代\n";
        }
    }

    if を 2 段ネストすると読みにくい。論理演算子で 1 つにまとめる。

  3. && (かつ・and)

    <?php
    if ($age >= 18 && $age < 65) {
        echo "現役世代\n";
    }
    • A && B両方が真のときだけ
    • かつ」「両方」を表現したいときに使う
    A B A && B
  4. || (または・or)

    <?php
    if ($day === "Sat" || $day === "Sun") {
        echo "週末\n";
    }
    • A || Bどちらかが真なら
    • または」「どっちか」を表現したいときに使う

    | A | B | A || B | |---|---|---| | 真 | 真 | 真 | | 真 | 偽 | 真 | | 偽 | 真 | 真 | | 偽 | 偽 | 偽 |

  5. ! (ではない・not)

    <?php
    if (!($n % 2 === 0)) {
        echo "偶数ではない\n";
    }
    • !AA の真偽を反転 する
    • 〜ではない」を表現したいときに使う
    • 真 → 偽、偽 → 真

    ($n % 2 === 0) が「偶数」を表すので、 !($n % 2 === 0) で「偶数ではない」になる。

  6. 組み合わせの例

    <?php
    if ($n >= 0 && $n <= 100) {
        echo "範囲内\n";
    }
    • 「0 以上 かつ 100 以下」= 範囲チェックの定番
    • && の左右はそれぞれ独立した条件式
    <?php
    if (!($age >= 18 && $age < 65)) {
        echo "現役世代ではない\n";
    }

    !(...) でまとめて反転もできる。

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

    && で「両方が真」を判定できる ✅ || で「どちらかが真」を判定できる ✅ ! で真偽を反転できる ✅ 複数条件を 1 つの if にまとめられる

    → ドリルへ

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

Lesson 2 / Chapter 4


複数の条件を組み合わせたい

「年齢が 18 以上 かつ 65 未満」のように、 条件を 2 つ以上つなげて判定したい ことがある。

これまでの書き方:

<?php
if ($age >= 18) {
    if ($age < 65) {
        echo "現役世代\n";
    }
}

if を 2 段ネストすると読みにくい。論理演算子で 1 つにまとめる。


&& (かつ・and)

<?php
if ($age >= 18 && $age < 65) {
    echo "現役世代\n";
}
  • A && B両方が真のときだけ
  • かつ」「両方」を表現したいときに使う
A B A && B

|| (または・or)

<?php
if ($day === "Sat" || $day === "Sun") {
    echo "週末\n";
}
  • A || Bどちらかが真なら
  • または」「どっちか」を表現したいときに使う

| A | B | A || B | |---|---|---| | 真 | 真 | 真 | | 真 | 偽 | 真 | | 偽 | 真 | 真 | | 偽 | 偽 | 偽 |


! (ではない・not)

<?php
if (!($n % 2 === 0)) {
    echo "偶数ではない\n";
}
  • !AA の真偽を反転 する
  • 〜ではない」を表現したいときに使う
  • 真 → 偽、偽 → 真

($n % 2 === 0) が「偶数」を表すので、 !($n % 2 === 0) で「偶数ではない」になる。


組み合わせの例

<?php
if ($n >= 0 && $n <= 100) {
    echo "範囲内\n";
}
  • 「0 以上 かつ 100 以下」= 範囲チェックの定番
  • && の左右はそれぞれ独立した条件式
<?php
if (!($age >= 18 && $age < 65)) {
    echo "現役世代ではない\n";
}

!(...) でまとめて反転もできる。


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

&& で「両方が真」を判定できる ✅ || で「どちらかが真」を判定できる ✅ ! で真偽を反転できる ✅ 複数条件を 1 つの if にまとめられる

→ ドリルへ

この章で取り組む 演習問題の流れ (3ステップ)
  1. 01 ドリル 01 — `&&` で範囲判定 README.md starter.php answer.php
  2. 02 ドリル 02 — `||` で週末判定 README.md starter.php answer.php
  3. 03 ドリル 03 — `!` で奇数判定 README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — `&&` で範囲判定

問題

標準入力で整数を 1 行受け取り、 0 以上 かつ 100 以下 なら valid を、そうでなければ invalid を出力してください。

入力例:

50

期待される出力:

valid

ヒント

  • $n = (int) trim(fgets(STDIN)); で整数として読む
  • if ($n >= 0 && $n <= 100) で範囲チェック
  • elseinvalid を出す

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 02 — `||` で週末判定

問題

標準入力で曜日を 1 行受け取ります。値は Mon Tue Wed Thu Fri Sat Sun のいずれかです。 Sat または Sun なら weekend を、そうでなければ weekday を出力してください。

入力例:

Sat

期待される出力:

weekend

ヒント

  • $day = trim(fgets(STDIN)); で文字列として読む
  • if ($day === "Sat" || $day === "Sun") で or 判定

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

ドリル 03 — `!` で奇数判定

問題

標準入力で整数を 1 行受け取り、偶数ではない (= 奇数) なら odd を、 そうでなければ even を出力してください。

判定には ! 演算子を必ず使う こと。 つまり「偶数」を表す条件式を作り、それを ! で反転して使います。

入力例:

7

期待される出力:

odd

ヒント

  • $n % 2 === 0 が「偶数」を表す
  • !($n % 2 === 0) で「偶数ではない」になる
  • if (!($n % 2 === 0)) { ... } else { ... }

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(3問)

  1. ドリル 01 — `&&` で範囲判定

    README.md starter.php answer.php

  2. ドリル 02 — `||` で週末判定

    README.md starter.php answer.php

  3. ドリル 03 — `!` で奇数判定

    README.md starter.php answer.php

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

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