5.4.4 布尔值

原文链接: https://kotlinlang.org/docs/booleans.html

5.4.4 布尔值

Boolean 类型表示逻辑值:true 和 false。

在回答是/否问题的函数中,以及在 while、if 和 when 条件中使用 Boolean 值。

声明 Boolean 变量

要声明 Boolean 变量,请把它赋值为 true 或 false。

你可以显式指定 Boolean 类型,也可以让 Kotlin 根据值推断:

1
2
val isTrue: Boolean = true
val isFalse = false // Kotlin infers Boolean

如果值可以为 null,请使用 Boolean?:

1
val isEnabled: Boolean? = null

注意: 你不能把整数值赋给 Boolean 变量。在 Kotlin 中,0 和 1 不是 Boolean 值。

产生 Boolean 值

你可以用比较表达式和函数来产生 Boolean 值:

1
2
3
4
5
6
7
8
9
fun main() {
    val number = 10
    val isPositive = number > 0
    println(isPositive) // true

    val language = "Kotlin"
    val isEmpty = language.isEmpty()
    println(isEmpty) // false
}

你也可以在条件和其他表达式中使用这些结果:

1
2
3
4
5
6
7
8
fun main() {
    val number = 10
    val isPositive = number > 0 // true

    if (isPositive) {
        println("The number is positive.")
    }
}

Boolean 运算

Kotlin 提供了用于处理 Boolean 值的运算符和中缀函数。你可以用它们取反一个 Boolean 值,或把多个 Boolean 值组合成单个结果。

取反(NOT)

NOT 运算符对一个 Boolean 值取反。

要使用 NOT,请把 ! 运算符放在 Boolean 值之前:

1
2
val isOn = true
val isOff = !isOn // isOff is false

逻辑与(AND)

AND 运算符只有在两个操作数都为 true 时才返回 true。

要使用逻辑与,请把 && 运算符放在操作数之间:

1
2
3
4
val a = false && false // false
val b = false && true // false
val c = true && false // false
val d = true && true  // true

注意: 如果第一个操作数是 false,&& 运算符会跳过第二个操作数。要同时求值两个操作数,请改用 and 中缀函数。

逻辑或(OR)

OR 运算符在至少一个操作数为 true 时返回 true。

要使用逻辑或,请把 || 运算符放在操作数之间:

1
2
3
4
val a = false || false // false
val b = false || true  // true
val c = true || false  // true
val d = true || true   // true

注意: 如果第一个操作数是 true,|| 运算符会跳过第二个操作数。要同时求值两个操作数,请改用 or 中缀函数。

异或(XOR)

异或(XOR)运算在两个操作数取值不同时返回 true。

要使用 XOR,请在两个操作数之间写 xor:

1
2
3
4
val a = false xor false // false
val b = false xor true  // true
val c = true xor false  // true
val d = true xor true   // false

注意: xor 是中缀函数,不是运算符。关于 Boolean 函数的更多内容,请参阅 API 参考。

运算符优先级

如果一个表达式包含多个逻辑运算且没有用圆括号指定求值顺序,Kotlin 会应用优先级规则。优先级更高的运算先于优先级更低的运算求值。

对于本节介绍的 Boolean 运算,优先级顺序如下:

  1. !
  2. xor(以及其他中缀函数)
  3. &&
  4. ||

在下面的示例中,编译器会先求值 &&,再求值 ||:

1
2
3
4
fun main() {
    val result = true || false && false
    println(result) // true
}

要明确求值顺序,请使用圆括号:

1
2
3
4
fun main() {
    val result = (true || false) && false
    println(result) // false
}

条件中的 Boolean

if、when 和 while 会求值 Boolean 表达式来引导程序流程。

if 表达式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
fun main() {
    val number = 4
    val isEven = number % 2 == 0

    // Condition already has the `Boolean` type
    // You do not need to compare it to `true` or `false`
    if (isEven) {
        println("The number is even.")
    } else {
        println("The number is odd.")
    }
}

when 表达式

1
2
3
4
5
6
7
8
9
fun main() {
    val number = 3

    when {
        number > 0 -> println("The number is positive.")
        number < 0 -> println("The number is negative.")
        else -> println("The number is zero.")
    }
}

while 循环

1
2
3
4
5
6
7
8
fun main() {
    var isCalculating = true

    while (isCalculating) {
        println("Calculating...")
        isCalculating = false
    }
}