if
表达式
if
表达式用于进行选择。
关键字 if
会测试一个表达式,以查看它是否为 true
或 false
,并根据结果执行相应的操作。一个真或假的表达式被称为 布尔表达式,这个概念来源于数学家 George Boole,他发明了这些表达式背后的逻辑。以下是使用 >
(大于)和 <
(小于)符号的示例:
// IfExpressions/If1.kt
fun main() {
if (1 > 0)
println("It's true!")
if (10 < 11) {
println("10 < 11")
println("ten is less than eleven")
}
}
/* 输出:
It's true!
10 < 11
ten is less than eleven
*/
在 if
后的括号中的表达式必须评估为 true
或 false
。如果为 true
,则执行后续的表达式。要执行多行代码,将它们放在花括号内。
我们可以在一个地方创建布尔表达式,并在另一个地方使用它:
// IfExpressions/If2.kt
fun main() {
val x: Boolean = 1 >= 1
if (x)
println("It's true!")
}
/* 输出:
It's true!
*/
因为 x
是布尔类型,所以可以直接使用 if(x)
来测试。
布尔运算符 >=
返回 true
,如果操作符左侧的表达式大于等于右侧的表达式。同样,<=
返回 true
,如果左侧的表达式小于等于右侧的表达式。
else
关键字允许处理 true
和 false
两种情况:
// IfExpressions/If3.kt
fun main() {
val n: Int = -11
if (n > 0)
println("It's positive")
else
println("It's negative or zero")
}
/* 输出:
It's negative or zero
*/
else
关键字只能与 if
结合使用。你不仅限于单个检查,你可以通过组合 else
和 if
来测试多个组合:
// IfExpressions/If4.kt
fun main() {
val n: Int = -11
if (n > 0)
println("It's positive")
else if (n == 0)
println("It's zero")
else
println("It's negative")
}
/* 输出:
It's negative
*/
在这里,我们使用 ==
来检查两个数字是否相等。!=
用于测试不等式。
通常的模式是从 if
开始,后面跟着所需数量的 else if
子句,最后以最终的 else
结束,用于处理不符合所有先前测试的情况。当 if
表达式变得越来越大和复杂时,你可能会改用 when
表达式。when
表达式将在本书后面的 when
表达式 部分中进行描述。
“非”运算符 !
用于测试布尔表达式的相反情况:
// IfExpressions/If5.kt
fun main() {
val y: Boolean = false
if (!y)
println("!y is true")
}
/* 输出:
!y is true
*/
要将 if(!y)
转化为口语,可以说 “if not y”。
整个 if
是一个表达式,因此它可以产生一个结果:
// IfExpressions/If6.kt
fun main() {
val num = 10
val result = if (num > 100) 4 else 42
println(result)
}
/* 输出:
42
*/
在这里,我们将整个 if
表达式产生的值存储在一个中间标识符中,称为 result
。如果条件满足,则第一个分支产生 result
。如果不满足条件,则 else
值变为 result
。
让我们练习创建函数。以下是一个接受布尔参数的函数:
// IfExpressions/TrueOrFalse.kt
fun trueOrFalse(exp: Boolean): String {
if (exp)
return "It's true!" // [1]
return "It's false" // [2]
}
fun main() {
val b = 1
println(trueOrFalse(b < 3))
println(trueOrFalse(b >= 3))
}
/* 输出:
It's true!
It's false
*/
布尔参数 exp
被传递给函数 trueOrFalse()
。如果参数作为表达式传递,比如 b < 3
,那么表达式会首先被求值,然后将结果传递给函数。trueOrFalse()
测试 exp
,如果结果为 true
,则执行 [1] 行,否则执行 [2] 行。
- [1]
return
表示,“离开函数并以此值作为函数的结果”。请注意,return
可以出现在函数中的任何位置,不必在结尾处。
与前面的示例不同,你可以使用 else
关键字将结果作为表达式生成:
// IfExpressions/OneOrTheOther.kt
fun oneOrTheOther(exp: Boolean): String =
if (exp)
"True!" // 不需要 'return'
else
"False"
fun main() {
val x = 1
println(oneOrTheOther(x == 1))
println(oneOrTheOther(x == 2))
}
/* 输出:
True!
False
*/
在 trueOrFalse()
中使用了两个表达式,而 oneOrTheOther()
是一个单一表达式。该表达式的结果成为函数的结果,因此 if
表达式成为函数体。
练习和解答可在 www.AtomicKotlin.com 找到。