与其他编程语言一样,Kotlin 能够根据一段代码是否被评估为真来做出决策。此类代码段称为条件表达式。Kotlin 还能够创建和迭代循环。
条件表达式
Kotlin 提供了用于检查条件表达式的 if
和 when
。
如果您必须在
if
和when
之间进行选择,我们建议您使用when
,因为它会带来更强大、更安全的程序。
If
要使用 if
,请在括号 ()
中添加条件表达式,并在大括号 {}
中添加结果为 true
时要执行的操作:
fun main() {
val d: Int
val check = true
if (check) {
d = 1
} else {
d = 2
}
println(d)
// 1
}
Kotlin 中没有三元操作符 condition ? then : else
。 相反,if
可以用作表达式。使用 if
作为表达式时,没有大括号 {}
:
fun main() {
val a = 1
val b = 2
println(if (a > b) a else b)
// 返回值:2
}
when
当你有一个具有多个分支的条件表达式时使用。when
可以用作语句或表达式。
下面是使用 when
作为语句的示例:
- 将条件表达式放在括号
()
内,将要执行的操作放在大括号{}
内。 - 在每个分支中使用
->
将每个条件与每个操作(action)分开。
fun main() {
val obj = "Hello"
when (obj) {
"1" -> println("One")
"Hello" -> println("Greeting")
else -> println("Unknown")
}
}
请注意,将按顺序检查所有分支条件,直到满足其中一个条件。因此,只执行第一个合适的分支。
下面是将 when
用作表达式的示例。立即将 when
语法分配给变量。
fun main() {
val obj = "Hello"
val result = when (obj) {
"1" -> "One"
"Hello" -> "Greeting"
else -> "Unknown"
}
println(result)
// Greeting
}
如果将 when
用作表达式,则 else
分支是必需的,除非编译器可以检测到分支条件涵盖了所有可能的情况。
前面的示例表明,when
对于匹配变量很有用。当您需要检查布尔表达式链时,when
也很有用:
fun main() {
val temp = 18
val description = when {
// 如果 `temp < 0` 为 true,则将 description 设置为 "very cold"
temp < 0 -> "very cold"
// 如果 `temp < 10` 为 true,则将 description 设置为 "a bit cold"
temp < 10 -> "a bit cold"
// 如果 `temp < 20` 为 true,则将 description 设置为 "warm"
temp < 20 -> "warm"
// 如果不满足先前条件,则将 description 设置为 "hot"
else -> "hot"
}
println(description)
}
范围
在讨论循环之前,了解如何为循环构造要迭代的范围是很有用的。
在 Kotlin 中创建范围的最常见方法是使用 ..
操作符。例如,1..4
等价于 1、2、3、4
。
若要声明不包含结束值的范围,请使用 ..<
操作员。例如,1..<4
等价于 1、2、3
。
若要以相反的顺序声明范围,请使用 downTo。例如,4 downTo 1
等于 4、3、2、1
。
若要声明在非 1 的步长中递增的范围,请使用 step
和所需的增量值。例如,1..5 step 2
等效于 1、3、5
。
您也可以对 Char 范围执行相同的操作:
'a'..'d'
等同于'a', 'b', 'c', 'd'
'z' downTo 's' step 2
等同于'z'、'x'、'v'、't'
循环
编程中最常见的两个循环结构是 for 和 while。使用 for 循环访问一系列值并执行操作。使用 while 继续操作,直到满足特定条件。
For 循环
利用您对范围的新知识,您可以创建一个 for 循环,该循环遍历数字 1 到 5 并每次打印数字。
将迭代器和范围放在括号 ()
内,并带有关键字 in
。在大括号 {}
中添加要完成的操作:
fun main() {
for (number in 1..5) {
// number 是迭代器,1..5 是范围
print(number)
}
// 12345
}
集合也可以通过循环进行迭代:
fun main() {
val cakes = listOf("carrot", "cheese", "chocolate")
for (cake in cakes) {
println("好吃,这是 $cake 蛋糕!")
}
// 好吃,这是 carrot 蛋糕!
// 好吃,这是 cheese 蛋糕!
// 好吃,这是 chocolate 蛋糕!
}
while 循环
while 可以通过两种方式使用:
- 在条件表达式为 true 时执行代码块。(while)
- 首先执行代码块,然后检查条件表达式。(do-while)
在第一种使用方式(while):
- 在括号
()
内声明 while 循环继续下去的条件表达式。 - 在大括号
{}
中添加要完成的操作。
以下示例使用增量运算符 ++
递增 cakesEaten
变量的值。
fun main() {
var cakesEaten = 0
while (cakesEaten < 3) {
println("Eat a cake")
cakesEaten++
}
// Eat a cake
// Eat a cake
// Eat a cake
}
第二种使用方式(do-while)
- 在小括号
()
内声明让 while 循环继续下去的条件表达式。 - 使用关键字
do
在大括号{}
中定义你想要完成的操作。
fun main() {
var cakesEaten = 0
var cakesBaked = 0
while (cakesEaten < 3) {
println("吃一个蛋糕")
cakesEaten++
}
do {
println("烤一个蛋糕")
cakesBaked++
} while (cakesBaked < cakesEaten)
// 吃一个蛋糕
// 吃一个蛋糕
// 吃一个蛋糕
// 烤一个蛋糕
// 烤一个蛋糕
// 烤一个蛋糕
}
有关条件表达式和循环的更多信息和示例,请参阅条件和循环。
现在您已经了解了 Kotlin 控制流的基础知识,是时候学习如何编写自己的函数了。