most from ​​reference​

if表达式

在kotlin中,if是一个表达式,即它返回一个值。kotlin中没有Java中的三元运算符。

// Traditional usage 
var max = a
if (a < b) max = b

// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}

// As expression
val max = if (a > b) a else b

如果分支是一个块,并且最后一个表达式是块的值:

val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}

如果您使用if作为表达式儿不是语句(例如,返回其值或将其分配给变量),则表达式还需要一个else分支。
具体参考​​​if语法​​。

when表达式

when替换C语言的交换运算符时,最简单的形式就是这样

when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}

when它的参数与所有分支顺序匹配,直到满足一些分支条件。when也可以用作表达式或作为语句。如果将其用作表达式,则满足分支的值将变为整体表达式的值。如果将其用作语句,则忽略各个分支的值。(就像if,每个分支可以是一个块,其值是块中最后一个表达式的值)。

如果没有分支满足,则else逻辑会执行。if被用作表达式时,else分支是强制性的,除非编译器可以证明所有可能的情况都能覆盖分支条件。

如果许多情况可以用同样的方式处理,分支条件可能与逗号组合:

when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}

我们可以使用任意表达式(不仅仅是常量)作为分支条件

when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}

我们也可以用in 和 !in 关键字判断一个值是否在一个​​范围​​或者集合中:

when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}

我们也可以用is 和 !is 关键字判断一个对象是不是指定的类型。请注意,由于​​智能转换​​,您可以访问该类型的方法和属性,而无需任何额外的检查。

fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}

when表达式也可以用来替换if-else。如果没有参数,则分支条件是简单的布尔表达式,当天剑为真时执行分支:

when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}

参考​​when语法​​。

For 循环

for循环提供迭代器可以遍历任何东西,语法如下:

for (item in collection) print(item)

方法体

for (item: Int in ints) {
// ...
}

综上所述,for循环提供迭代器可以遍历任何东西,即

  • 具有成员或扩展功能iterator(),其返回类型
  • 有一个成员变量或扩展函数next()
  • 有一个成员变量或扩展函数hasNext(),返回值类型为Boolean。

所有这三个功能都需要标记为operator。

for数组上的循环编译的时候不创建基于索引循环的迭代器
如果要遍历具有索引的数组或列表,可以这样做:

for (i in array.indices) {
print(array[i])
}

请注意,这个“范围的迭代器”是最佳的实现,因为没有创建额外的对象。
或者,您可以使用withIndex库函数:

for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}

具体参考​​for语法​​。

while 循环

while和do…while的用法跟以前一样

while (x > 0) {
x--
}

do {
val y = retrieveData()
} while (y != null) // y is visible here!

具体参考​​while语法​​。

break和continue

具体参考​​return语法​​。