論理演算子
テクノロジ系 / conditional (if / else / switch / 三項)
論理演算子
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";
}!Aは A の真偽を反転 する- 「〜ではない」を表現したいときに使う
- 真 → 偽、偽 → 真
($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 にまとめられる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — && で範囲判定
問題
標準入力で整数を 1 行受け取り、
0 以上 かつ 100 以下 なら valid を、そうでなければ invalid を出力してください。
入力例:
50
期待される出力:
valid
採点
php scripts/grade.php topics/conditional/ch04-logical/drill/01-and/
ヒント
$n = (int) trim(fgets(STDIN));で整数として読むif ($n >= 0 && $n <= 100)で範囲チェックelseでinvalidを出す
ドリル 02 — || で週末判定
問題
標準入力で曜日を 1 行受け取ります。値は Mon Tue Wed Thu Fri Sat Sun のいずれかです。
Sat または Sun なら weekend を、そうでなければ weekday を出力してください。
入力例:
Sat
期待される出力:
weekend
採点
php scripts/grade.php topics/conditional/ch04-logical/drill/02-or/
ヒント
$day = trim(fgets(STDIN));で文字列として読むif ($day === "Sat" || $day === "Sun")で or 判定
ドリル 03 — ! で奇数判定
問題
標準入力で整数を 1 行受け取り、偶数ではない (= 奇数) なら odd を、
そうでなければ even を出力してください。
判定には ! 演算子を必ず使う こと。
つまり「偶数」を表す条件式を作り、それを ! で反転して使います。
入力例:
7
期待される出力:
odd
採点
php scripts/grade.php topics/conditional/ch04-logical/drill/03-not/
ヒント
$n % 2 === 0が「偶数」を表す!($n % 2 === 0)で「偶数ではない」になるif (!($n % 2 === 0)) { ... } else { ... }