Kotlin的流程控制
- 2019 年 10 月 4 日
- 筆記
1 when
when就是傳統的switch表達的變種
fun cas(obj: Any) { when (obj) { 1 -> println("One") "Hello" -> println("Greeting") is Long -> println("Long") !is String -> println("not a string") else -> println("Unknown") } }
when表達式
fun whenExpression(obj: Any) { var result = when (obj) { is String -> obj.toString() else -> "Hello" } }
總結起來就是

Loops
for
val cakes = listOf<String>("A", "B", "C") for (cake in cakes) { println("Yum, it is nice $cake cake!") }
while do-while
var index = 5 while (index < 10) { index++ } do { println(index--) } while (index > 0)
對於loop下的幾種方式有編程基礎的混個臉熟帶過就行
Ranges
for(i in 0..3) { // 1 print(i) } print(" ") for(i in 2..8 step 2) { // 2 print(i) } print(" ") for (i in 3 downTo 0) { // 3 print(i) } print(" ")
range也是一個基礎語法方式,表示一個數據範圍如 1..3
我們除了遍歷也可以用於判斷是否存在這個範圍內
if (x !in 1..4) { // 2 print(x) }
上面是判斷x是否在1..4這個range中
Equals的判斷
在kt中有==和===,但是無論哪個必須是同類才可
不同之處在於==還判斷內部元素而===更多的是判斷地址是否相同
看下面兩個例子
val authors = setOf("Shakespeare", "Hemingway", "Twain") val writers = setOf("Twain", "Shakespeare", "Hemingway") println(authors == writers) // 1 println(authors === writers) // 2
上栗1的結果為true,2的結果為false,因為1是將內部數據排序然後比較數據,而2則是因為兩個地址不同直接判斷為false。我們再看下里
val authors = setOf("Shakespeare", "Hemingway", "Twain") val writers = authors println(authors == writers) // 1 println(authors === writers) // 2
根據上面的原理倆個的結果可定都是true
最後就是 典型的三目?表達式
fun max(a: Int, b: Int) = if (a > b) a else b // 1 println(max(99, -42))