流程控制语句是编程语言中的核心之一。可分为:
分支语句(if 、 when)
循环语句(for、while )和
跳转语句 (return 、 break 、continue、throw)等。
if表达式
if-else语句是控制程序流程的最基本的形式,其中else是可选的。
在 Kotlin 中,if 是一个表达式,即它会返回一个值(跟Scala一样)。
代码示例:
/**
* Created by jack on 2017/6/9.
*/
fun main(args: Array<String>) {
println(max(1, 2))
}
fun max(a: Int, b: Int): Int {
// 作为表达式
val max = if (a > b) a else b
return max // return if (a > b) a else b
}
fun max1(a: Int, b: Int): Int {
// 传统用法
var max1 = a
if (a < b) max1 = b
return max1
}
fun max2(a: Int, b: Int): Int {
// With else
var max2: Int
if (a > b) {
max2 = a
} else {
max2 = b
}
return max2
}
另外,if 的分支可以是代码块,最后的表达式作为该块的值:
fun max3(a: Int, b: Int): Int {
val max = if (a > b) {
print("Max is a")
a
} else {
print("Max is b")
b
}
return max
}
if作为代码块时,最后一行为其返回值。
另外,在Kotlin中没有类似true? 1: 0这样的三元表达式。对应的写法是使用if else语句:if(true) 1 else 0
when表达式
Kotlin中的When和If一样,既可以作为语句,也可以作为表达式,在作为语句时,它相当于Java中的switch。下面是对传入的参数input做一个判断
fun useWhen(input: Int) {
var result = when (input) {
//判断input是否为1
1 -> println("input == 1")
//判断input是否为2
2 -> {
println("input == 2")
}
//input是否在10到20的范围内
in 10..20 -> println("input number in the range")
//input是否不在20到30的范围内
!in 20..30 -> println("input number outside the range")
else -> { //When作为表达式使用时,最后一定要以else
println("input: $input")
}
}
println("result: $result")
}
从上面的代码看,你会发现它比Java的switch灵活多了。这里只是使用When语句,如果要使用When表达式,则应该If表达式一样,最终一定要以else结尾。
for循环
for循环能够对任何提供迭代器(iterator)的对象进行遍历,语法格式如下:
for (item in collection){
//代码块
...
}
和Java有区别,但是也非常简单,Kotlin中的for更类似Java中的增强for循环。
fun useFor() {
val students: Array<String> = arrayOf("小主", "小超", "小七")
for (student in students) {//输出学生名字
println("student: $student")
}
for ((index, student) in students.withIndex()) {//输出学生的下标和名字
println("the element at $index is $student")
}
}
While循环
Kotlin中的white(){}和do{}while()和Java差不多,这里不多做赘述。
fun userWhile() {
var counter = 10
while (counter > 0) {
counter--
println("counter: $counter")
}
do {
counter++
println("counter: $counter")
} while (counter < 10)
}
Kotlin和Java一样有下面三种跳转表达式
continue:跳过这一次循环
break:终止包裹它的循环
return:从包裹它的函数或者匿名函数中返回
以上三种跳转都支持跳转到指定的标签处。标签的使用方式也简单,使用@在对应的循环或者匿名函数做标记即可,就像下方的示例代码一样
/**
* 跳除循环和退出
*/
fun showType3(){
loop@ for (i in 1..11){
if (i==2){
continue@loop
}
if (i== 5){
break@loop
}
println(i)
}
}