真偽値の全体像
Java の真偽値は boolean 型で、取りうる値は true と false の二つだけです。C 言語のように 0 や非 0 を真偽として扱うことはできません。条件分岐(if)、繰り返し(while)、短絡評価(&& と ||)など、プログラムの流れを決める中心的な役割を担います。boolean は「事実を表すラベル」と考えると設計が安定します。
基本的な使い方と条件式
宣言・代入・比較の基本
boolean 変数は「状態」や「成立するかどうか」を表します。比較演算の結果は boolean になります。
public class Basics {
public static void main(String[] args) {
boolean isMember = true;
int score = 75;
boolean passed = score >= 60; // 比較の結果は boolean
if (passed && isMember) {
System.out.println("割引適用");
} else {
System.out.println("通常料金");
}
}
}
Java条件式は「読み手が頭の中で日本語に翻訳できる」くらい短く明快に保つのがコツです。複雑になったら途中変数に分解して意味のある名前を与えると可読性が上がります。
論理演算子と短絡評価(重要ポイントの深掘り)
AND, OR, NOT の基本と短絡
&& は「両方 true なら true」、|| は「どちらかが true なら true」、! は「反転」です。Java の && と || は短絡評価(ショートサーキット)で、結果が確定した時点で右側を評価しません。
public class ShortCircuit {
public static void main(String[] args) {
boolean left = false;
boolean rightEvaluated = test(); // 呼ばれるかを確認するためのメソッド
// 左が false のため、右は評価されない
if (left && test()) {
System.out.println("AND 真");
}
// 左が true のため、右は評価されない
if (true || test()) {
System.out.println("OR 真");
}
}
static boolean test() {
System.out.println("右が評価された");
return true;
}
}
Java短絡評価は「安全なガード」を書くときに必須です。右側で配列アクセスやメソッド呼び出しをする前に、左側で「null ではない」「範囲内である」を確認すれば、例外を予防できます。
null 安全とガードの書き方(重要ポイントの深掘り)
安全な評価順序で例外を防ぐ
null 参照に対してメソッドを呼ぶと NullPointerException になります。短絡評価を活用して安全な順序で判定を行います。
public class NullSafe {
public static void main(String[] args) {
String name = null;
// 左が false(name != null)なら右は評価されない
boolean hasJ = (name != null) && name.startsWith("J");
System.out.println(hasJ); // false(例外なし)
}
}
Java「存在するか」→「使う」という順序を徹底すると、ランタイム例外の多くを未然に防げます。ガード条件は読みやすい名前を持つ途中変数にすると、意図がさらに明確になります。
真偽値の設計指針と命名
意味のある肯定形で命名する
boolean は「問い」に対する「はい/いいえ」です。変数名は肯定形で、質問文として読める形が最も分かりやすくなります。
boolean isEmpty;
boolean hasPermission;
boolean shouldRetry;
Java否定形(notReady など)は二重否定を生みやすく、条件式が読みにくくなります。条件が複雑なら、途中変数に分割して「何を問うているか」を名前で表現します。
三項演算子と戻り値にするパターン
条件で値を選ぶシンプルな書き方
boolean を条件に、値を簡潔に選び分けるには三項演算子 ?: を使います。分岐の結果を変数に入れると、後続処理が読みやすくなります。
public class Ternary {
public static void main(String[] args) {
int score = 85;
boolean passed = score >= 60;
String label = passed ? "合格" : "不合格";
System.out.println(label);
}
}
Java三項演算子は短くできる反面、ネストすると読みにくくなります。複雑になったら if に戻すか、途中変数で段階的に表現しましょう。
実用例で総復習
例 1: 入力検証と早期リターン(ガード節)
public class Validator {
public static void main(String[] args) {
String email = "user@example.com";
if (!isValid(email)) {
System.out.println("メール形式が不正です");
return;
}
System.out.println("処理を続行します");
}
static boolean isValid(String s) {
return s != null && s.contains("@") && s.indexOf("@") > 0 && s.indexOf("@") < s.length() - 1;
}
}
Javaboolean を戻り値にした検証関数は、呼び出し側で「ダメなら即終了」を書けるため、バグの混入を抑えます。条件を小さく積み上げて「読み手が頷ける」判定にするのがコツです。
例 2: 権限チェックと安全な組み合わせ
public class Auth {
public static void main(String[] args) {
boolean isAdmin = true;
boolean isActive = false;
if (isAdmin && isActive) {
System.out.println("管理画面へアクセス可能");
} else {
System.out.println("アクセス拒否");
}
}
}
Java&& による「両方満たす」判定は、前提条件を左側に、コストの高い/危険な処理前の確認を右側に置くと安全です。
例 3: 設定フラグで振る舞いを切り替える
public class FeatureFlag {
public static void main(String[] args) {
boolean enableCache = true;
String data = fetch(enableCache);
System.out.println(data);
}
static String fetch(boolean useCache) {
if (useCache) {
return "cache:DATA";
}
return "fresh:DATA";
}
}
Java真偽値は機能のオン/オフを制御する最小のレバーです。関数引数に使うとテストもしやすく、振る舞いの切り替えが明瞭になります。
仕上げのアドバイス(重要ポイントのまとめ)
boolean は「問いに対する答え」。条件式は短く、評価順序は安全に、名前は肯定形で。「存在確認 → 利用」のガードを徹底し、短絡評価で例外を避けます。複雑な論理は途中変数に分解して意味を可視化すると、読み手の脳内負荷が激減します。設計段階で「何を問いたいのか」を明確にすれば、真偽値はコードの意図を最短距離で伝える強力な道具になります。
