1. 論理データ型: boolean
すでに見たとおり、Java には非常に便利な演算子 — if-else があります。括弧内の条件が真であれば一方のブロックを、偽であればもう一方のブロックを実行します。
真か偽かの評価になる式を扱いやすくするために、Java には特別な型 — boolean が用意されています。この型の変数が取れる値は 2 つだけ: true(真)と false(偽)です。
それ以外の値を boolean 型の変数に代入することはできません。コンパイラが許しません。
boolean 型変数の例:
boolean isAdult = true;
boolean hasMoney = false;
boolean 型の変数が取れる値は true と false の 2 つだけ。以上!テストの結果とほぼ同じで、つまり「通った」か「落ちた」かです。
2. 比較演算
そんな単純な型が何の役に立つのでしょうか。boolean の本領は、論理式を組み立てるときに発揮されます。通常は比較演算子を使って作ります。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
| == | 等しい | |
true または false |
| != | 等しくない | |
true または false |
| > | より大きい | |
true または false |
| < | より小さい | |
true または false |
| >= | 以上 | |
true または false |
| <= | 以下 | |
true または false |
例:
int age = 20;
boolean isAdult = age >= 18; // true (20 は 18 以上)
boolean isTeenager = age >= 13 && age < 18; // false (20 は 18 未満ではない)
boolean isEven = age % 2 == 0; // true (20 は 2 で割り切れる)
ここでは isAdult は true になります。20 はまさに「成人」と言える年齢だからです。
重要ポイント 1:
2 文字から成る演算子は分割して書いてはいけません。
a < = 10
speed > = max
age = = 18
time ! = 0
重要ポイント 2:
=> と =< という演算子はありません。あるのは <= と >= だけです。a =< 3 と書くと、コードはコンパイルに失敗します。
重要ポイント 3:
Java では 18 < age < 65 のような表現は書けません。というのも、18 < age の結果は true または false であり、true を数値(65)と比較することはできないからです。型が異なります。
3. 論理演算
Java では 18 < age < 65 という式は書けません — 構文的に不正で、プログラムはコンパイルできません。
その代わり、次のように書けます:
(18 < age) AND (age < 65)
もちろん、実際には単語の AND を使うのではなく、論理演算子を使います。Java には 3 つの論理演算子があります: AND(かつ)、OR(または)、NOT(否定)。
良い知らせ: かっこを使えば、任意の複雑さの論理式を構築できます。
悪い知らせ: Java では and、or、not といった単語の代わりに、C 系の記号を使います: &&、||、!。
| 論理演算子 | 期待する表記 | 実際の表記 |
|---|---|---|
| AND (∧) | and | && |
| OR (∨) | or | || |
| NOT (¬) | not | ! |
Java における論理演算子の使用例をいくつか示します:
| 式 | 読み替え | 説明 |
|---|---|---|
|
(0 < a) and (a < 100) | (0 < a)かつ(a < 100) |
|
(not a) and (not b) | (NOT a)かつ(NOT b) |
|
not((not a) or (not b)) | NOT((NOT a) OR (NOT b)) |
4. 真理値表
論理演算を手短に確認しましょう。
AND 演算子
AND 演算子(かつ、&&、論理積、コンジャンクションとも呼ばれます)。
| 式 | 結果 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
OR 演算子
OR 演算子(または、||、論理和、ディスジャンクションとも呼ばれます)。
| 式 | 結果 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
NOT 演算子
NOT 演算子(否定、!、反転)。
| 式 | 結果 |
|---|---|
| ! true | false |
| ! false | true |
便利な恒等式:
| 式 | 結果 |
|---|---|
| m && !m | false |
| m || !m | true |
| !(a && b) | !a || !b |
| !(a || b) | !a && !b |
5. 論理演算の例: and, or, not
「AND(かつ)」演算は && で表します
両方の条件が真のときにのみ、結果は真になります。
int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true(16 は 14 より大きく、かつチケットがある)
年齢が 14 以上で、しかもチケットがあるなら、どうぞお入りください!
「OR(または)」演算は(||)で表します
少なくとも一方の条件が真であれば、結果は真になります。
boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true(どちらか一方でも true なら編集できる)
管理者 または モデレーターなら、どうぞボタンを押してください!
「NOT(否定)」演算は(!)で表します
否定は、真を偽に、偽を真に反転させます。
boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true(週末でなければ働く)
週末ではないなら、起きる時間です!
組み合わせ: 条件はどれだけ複雑にしてもよい
論理演算はいくらでも組み合わせられます(やり過ぎには注意)。明確さのために括弧を積極的に使いましょう。
例:
int age = 17;
boolean hasTicket = false;
boolean isVip = true;
boolean canGo = (age >= 18 && hasTicket) || isVip; // true(isVip = true だから)
ロジック: 成人かつチケット所持、または VIP なら入場可。VIP でない場合は、成人かつチケット所持のときだけ入場可。
GO TO FULL VERSION