KotlinのBoolean型について

採用はこちら

Kotlinの Boolean 型は一見すると単純な true / false を表す型ですが、null安全・式指向・Javaとの相互運用・JVM最適化 といった Kotlin の設計思想が色濃く反映されています。

本記事では、単なる文法説明にとどまらず、

  • KotlinならではのBooleanの扱い
  • Javaとの本質的な違い
  • Boolean? が生む設計上の意味
  • 実務での落とし穴と設計指針

までを体系的に解説します。

目次

Boolean型の基本

Booleanとは何か

Kotlinの Boolean 型は、真(true)か偽(false)の2値のみを表します。

val isLogin: Boolean = true
val hasError = false
  • 取り得る値は true / false
  • 条件分岐・状態判定・フラグ管理の基盤となる型

KotlinにおけるBooleanとJVMの関係

Kotlinには「boolean型」という表記は存在しない

Kotlinのソースコード上では、開発者が boolean と書くことはありません。

常に型名は Boolean です。

ただし、実行時(JVM上)では状況に応じて最適化されます。

  • 非nullableな Boolean
    → JVM上では primitive boolean として扱われることが多い
  • nullableな Boolean?
    ラッパークラス(java.lang.Boolean) 相当になる

nullable 以外でもボクシングされるケース

次のような場合も、JVMではラッパー型になります。

val list: List<Boolean> = listOf(true, false)
  • ジェネリクス
  • nullable
  • Any として扱われる場合

? が付いたら必ずボクシング」だが、「? が付いていなくても必ずプリミティブになるわけではない」という点は重要です。

Boolean?(nullable Boolean)の本質

Boolean? が表す意味

var flag: Boolean? = null

Boolean? は以下の 3状態を持ちます。

意味
true
false
null未定義・不明・未計算

「true / false だけでは足りない」設計のときにのみ使うべき型です。

Boolean? は条件式にそのまま使えない

Kotlinでは、条件式には 非nullableな Boolean が必要です。

val a: Boolean = true
if (a) {
    // OK
}

val b: Boolean? = null
// if (b) { } // コンパイルエラー

正しい書き方

if (b == true) {
    // b が true のときだけ実行
}

Kotlinは「null を含む曖昧な真偽」を許さず、必ず開発者に意図を明示させる設計になっています。

条件分岐とBooleanの厳密さ

if の条件は必ず Boolean

Kotlinでは、以下のような曖昧な書き方はできません。

// Javaでは可能なケース
// if (count) { }

// Kotlinでは不可
if (count) { } // コンパイルエラー

必ず明示的に比較します。

if (count > 0) {
    println("要素あり")
}

バグを「実行時」ではなく「コンパイル時」に潰す思想が貫かれています。

論理演算子と評価戦略

基本の論理演算子

演算子意味
&&論理AND
`
!否定
val canAccess = isAdmin && isActive

ショートサーキット評価

if (obj != null && obj.isValid()) {
    // objはnullでないことが保証される
}
  • 左側で結果が確定すると、右側は評価されない
  • null安全と非常に相性が良い

and() / or() との違い(重要)

val result = a.and(b)
  • and() / or()短絡評価しない
  • 両方の式が必ず評価される

条件分岐では 原則 && / || を使うのが安全です。

Booleanのメンバ関数と演算子

not()! の関係

val x = true

println(!x)      // false
println(x.not()) // false
  • not()! に対応する関数
  • 可読性・慣習の面では ! が一般的

if は「文」ではなく「式」

if は値を返す

Kotlinでは if 自体が値を返します。

val message = if (isSuccess) {
    "成功"
} else {
    "失敗"
}
  • 三項演算子は不要
  • Booleanは「制御」だけでなく「値の選択」にも使われる

when と Boolean 条件

引数なし when

when {
    score >= 80 -> println("A")
    score >= 60 -> println("B")
    else -> println("C")
}
  • 各条件は Boolean 式
  • 複雑な条件分岐を可読性高く表現できる

Javaとの本質的な違い

Kotlinは「曖昧さ」を排除する

観点JavaKotlin
Boolean null許される型で明示
if条件曖昧可Boolean必須
nullチェック実行時コンパイル時

KotlinのBooleanは、安全性と意図の明確さを最優先に設計されています。

実務での設計ベストプラクティス

命名は「質問文」になるように

val isEnabled: Boolean
val hasError: Boolean
val canEdit: Boolean

避けたい例

val flag: Boolean
val check: Boolean

否定形を避ける

val isNotAvailable = false // 読みにくい
val isAvailable = true     // 推奨

Boolean? は慎重に使う

  • 本当に「第3の状態」が必要か?
  • ほとんどのケースは Boolean + 初期値で足りる

よくある落とし穴

  • Boolean? を条件式に直接使おうとする
  • 複雑な論理式を1行に詰め込む
  • 意味の薄いフラグ変数が増殖する

改善例

val canAccess = isAdmin || (isMember && !isBanned)

if (canAccess) {
    // 明確で読みやすい
}

まとめ

  • Boolean は true / false の明確な2値
  • Boolean? は「未定義」という設計的意味を持つ
  • Kotlinでは条件式に Boolean しか使えない
  • if / when は式であり、値を返す
  • JVMでは状況により最適化・ボクシングされる
  • 命名と設計がコード品質を大きく左右する

以上、KotlinのBoolean型についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次