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))