流程控制語句是編程語言中的核心之一。可分爲:編程
分支語句(
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) }}