流程控制语句是编程语言中的核心之一。可分为:编程
分支语句(
if
、when
)编程语言循环语句(
for
、while
)和ide跳转语句 (
return
、break
、continue
、throw
)等。函数
f-else语句是控制程序流程的最基本的形式,其中else是可选的。oop
在 Kotlin 中,if 是一个表达式,即它会返回一个值(跟Scala同样)。spa
代码示例:code
/** * 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做为代码块时,最后一行为其返回值。blog
另外,在Kotlin中没有相似true? 1: 0
这样的三元表达式。对应的写法是使用if else
语句:element
if(true) 1 else 0
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循环可以对任何提供迭代器(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") } }
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同样有下面三种跳转表达式
以上三种跳转都支持跳转到指定的标签处。标签的使用方式也简单,使用@在对应的循环或者匿名函数作标记便可,就像下方的示例代码同样
/**
* 跳除循环和退出
*/
fun showType3(){
loop@ for (i in 1..11){
if (i==2){
continue@loop
}
if (i== 5){
break@loop
}
println(i) }}