程序执行语句主要分为3种:顺序语句、条件语句和循环语句。
条件语句
Kotlin 种的条件语句主要有两种实现方式:if 和 when。
if 条件语句
Kotlin 中的 if 语句和 Java 中的 if 语句几乎没有任何区别。举例:
fun largerNumber(num1: Int, num2: Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}
Kotlin 中的 if 语句相比于 Java 的不同是它是可以有返回值的,返回值就是 if 语句每一个条件中最后一行代码的返回值。因此,上面代码可以简化为如下:
fun largerNumber(num1: Int, num2: Int): Int {
val value = if (num1 > num2) {
num1
} else {
num2
}
return value
}
此处 if 语句每个条件的最后一行代码作为返回值,并赋值给了 value 变量。由于现在没有重新赋值的情况了,所以可以使用 val 关键字来声明 value 变量。
可以发现 value 其实也可以省略:
fun largerNumber(num1: Int, num2: Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
当函数只有一行代码时,可以省略函数体部分,直接讲这一行代码使用等号连接在函数定义的尾部:
fun largerNumber(num1: Int, num2: Int): Int = if (num1 > num2) {
num1
} else {
num2
}
if 中语句只有一条,大括号可以省略:
fun largerNumber(num1: Int, num2: Int): Int = if (num1 > num2) num1 else num2
when 条件语句
Kotlin中的 when 语句可以和 Java 中的 switch 比较。
相比于 Java 中 switch 只能传入整型或者短于整型的变量作为条件(JDK1.7之后增加了对字符串的支持),when 语句允许传入一个任意类型的参数。
首先看看 when 条件语句的使用:
fun getScore(name: String) = when (name) {
"Tom" -> 86
"Jim" -> 89
"Lucy" -> 90
else -> 0
}
when 语句和 if 语句一样也是可以有返回值的,因此仍然可以使用单行代码函数的语法糖。
可以概括 when 匹配执行的格式如下:
匹配值 -> { 执行逻辑 }
当你的执行逻辑只有一行代码时,{ } 可以省略。
除了精确匹配之外, when 语句还允许进行类型匹配,is 关键字是类型匹配的核心,相当于 Java 中的 instanceof 关键字。
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
when 语句还有一种不带参数的写法,这种写法是将判断的表达式完整的写在 when 的结构体当中:
fun getScore(name: String) = when {
name.startsWith("Tom") -> 86
name == "Jim" -> 90
else -> 0
}
循环语句
Kotlin 中的循环语句和 Java 一样,也提供了 while 循环和 for 循环,while 循环和 Java 没有任何区别。所以我们重点关注 for 循环。
Kotlin 采用的是 for-in 循环,开始学习 for-in 循环之前,需要理解一个区间的概念:
val range = 0..10
使用 .. 表示 range 是一个0到10的闭区间,[0,10]。
val range = 0 until 10
使用 until 关键字表示 range 是一个0到10的左闭右开的区间,[0,10)。
val range = 10 downTo 0
使用 downTo 关键字表示 range 是一个10到0的降序区间,[10,0]。
for-in 循环的语法如下:
for (i in 0..10) {
println(i)
}
使用 step 关键字指定步长的数字:
for (i in 0 until 10 step 2) {
println(i)
}
for-in 循环除了可以对区间遍历外,还可以用于遍历数组和集合。