在 Kotlin 中,if 是一个表达式:它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作为表达式
val max = if (a > b) a else b
如果您将if其用作表达式,例如,用于返回其值或将其分配给变量,则else分支是强制性的。
when定义具有多个分支的条件表达式。它类似于类switchC 语言中的语句。它的简单形式看起来像这样。
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
当然 when也是可以作为一个表达式使用
val data=when (x) {
1 -> "data1"
2 -> "data2"
else -> "data3"
}
for循环可以对任何提供迭代器的对象进行遍历,这将像 C# 这样的语言中的foreach循环。 for如下所示:
for (item in collection) print(item)
for循环体可以是一个代码块
for (item: Int in ints) {
// ……
}
如上所述,for 可以循环遍历任何提供了迭代器的对象。这意味着:
这三个函数都需要标记为 operator。
实现类似Java那样通过for循环遍历数组,通过区间遍历与array.indices
fun main() {
val array = arrayOf("a", "b", "c")
for (i in array.indices) {
println(array[i])
}
}
还有其他循环方式
fun main(){
val datas = arrayListOf("1", "2", "3")
datas.forEach {
println(it)
}
datas.forEachIndexed { index, data ->
println(data + index)
}
}
while和do-while循环在满足条件时连续执行它们的代码块。
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y 在此处可访问
Kotlin 有三种结构化跳转表达式:
loop@ for (i in 1..100) {
if (……) return@loop
}
Kotlin 中所有异常类继承自 Throwable 类。 每个异常都有消息、堆栈回溯信息
try {
// 一些代码
} catch (e: SomeException) { //可以有零到多个 catch 块
// 处理程序
} finally {
// 可选的 finally 块
}
try 是一个表达式,意味着它可以有一个返回值
val a: Int? = try { input.toInt() } catch (e: NumberFormatException) { null }
try-表达式的返回值是 try 块中的最后一个表达式或者是(所有)catch 块中的最后一个表达式。 finally 块中的内容不会影响表达式的结果。