kotlin学习笔记-条件与循环

if else

普通用法

和 JavaScript里的 if else 一样

    val a = 2
    val b = 3
 
    // 普通用法啊和 JavaScript里的 if else 一样
    if (a>b) {
        println("a 大于 b")
    } else {
        println("a 小于 b")
    }
 
    // 不包含 else分支
    if (a < b) {
      println("1111")
    }
 
    // 等效于上面那个没有else分支的用法
    if (a < b) println("1111")
 

if else 是有返回值的

和其他语言的不同之处,kotlin的if else 是有返回值

这个有些类似于 JavaScript里的三元运算符 let max = a>b ? a : b

    val a = 2
    val b = 3
 
    val max = if (a > b) a else b // 如果a大于b,就会把a返回,否则就把b返回;返回的值会赋值给max
    println(max) //  输出3

再来一个例子

    val a = 2
    val b = 3
 
    // 有了花括号,也会返回最后一个表达式的值
    val max = if (a > b) {
        println("Choose a")
        a // 这是花括号里的最后一个表达式, 没写return语句,也不能写return语句,会出错的
    } else {
        println("Choose b")
        b // 这是花括号里的最后一个表达式, 没写return语句,也不能写return语句,会出错的
    }
 
    println(max) //输出3

when

类似 其他语言里的 switch case ,但似乎更牛逼

   val a = 2
 
    when (a) {
        1 -> print("x == 1") //a不等于2,所以不会执行这里的代码,我这里没写花括号
        2 -> print("x == 2") //a等于2,所以打印 x == 2,我这里没写花括号
        else -> {  // 这里我写了花括号
            print("x不是1,也不是2")
        }
    }

加个花括号,在里面写更多表达式

 val a = 2
 
    when (a) {
        1 -> {
            print("x == 1")
            print("x == 1")
        }
        2 -> {
            print("x == 2")
            print("x == 2")
        }
        else -> {
            print("x不是1,也不是2")
        }
    }

如果有多个 case匹配呢

不需要其他语言里的break, 如果匹配到了某个分支, 那就不会再匹配后续分支

    val a = 2
 
    when (a) {
        2 -> {
            // 只会执行这里面的代码,只要某个分支匹配成功,那就不会再匹配后续分支
            print("x == 1")
            print("x == 1")
        }
        2 -> {
            // 这里的代码不会执行,虽然 case 也是2
            print("x == 2")
            print("x == 2")
        }
        else -> {
             print("x是啥")
        }
    }

when 匹配多个条件?

用逗号分割多个要匹配的结果

    val a = 2
 
    when (a) {
        1,2,3 -> { // 用逗号分割多个要匹配的结果
            print("x等于 1 或者2 或者3")
        }
        5 -> {
            print("x == 5")
        }
        else -> {
            print("x是啥")
        }
    }

when 区间匹配

配合in 关键字,和范围运算符 .. 一起使用, 就可以匹配区间了

 val a = 2
 
    when (a) {
        in 1..3 -> {
            print("x在1到3之间(含1和3)")
        }
        in 4..6 -> {
            print("x在4到6之间(含4和6)")
        }
        else -> {
            print("x是啥")
        }
    }

类型匹配

is 关键字,类似于 JavaScript里的 instanceof

val obj: Any = "Hello, world!"
 
when (obj) {
    is String -> println("obj is a String")
    is Int -> println("obj is an Int")
    else -> println("obj is of an unknown type")
}

不带参数的 when

这样有点当成 if else 来用了

    val a = 2
    val b = 3
    when {
        a > b -> println("a > b")
        a < b -> println("a < b")
        else -> println("a == b")
    }

使用函数或表达式进行匹配

这个和上面那个不带参数的用法一样,只是把表达式换成了函数

感觉这个还不错,有些复杂情况下,不用写很多 if else了

    fun isEven(number: Int) = number % 2 == 0
 
    val x = 4
 
    when {
        isEven(x) -> println("x is even")
        else -> println("x is odd")
    }

when 有返回值

when也可以像if else那样,直接赋值给某个变量

    val a = 2
    val b = 3
    val result = when {
        a > b -> "a > b"
        a < b -> "a < b"
        else -> "a == b"
    }
    println(result) // 输出 a < b

for循环

和其他语言差不多

    for (item in 1..3) print(item) // 输出123
    for (item in 1..3) {print(item)} // 输出123

step 步长

     // step 步长
    for (item in 1..9 step 2 ) print(item) // 输出13579 , step 2表示,每次跨越2个数,即步长为2

downTo 倒数

 for (item in 9 downTo 0 ) print(item) // 输出 9876543210
 
 // 倒数 结合 步长
 for (item in 9 downTo 0 step 2 ) print(item) // 输出 97531

until

半开区间(包含起始值,但不包含结束值)

   for (item in 0 until 10 ) print(item) // 输出 0123456789

遍历数组

    val arr = arrayOf(1,2,3,4,5)
    for (item in arr) print(item) // 输出 12345
 
    val array = arrayOf("a", "b", "c")
    for (i in array.indices) {
      print(array[i])
    }
 
  // 输出abc

while 循环

我没记错的话,c、c++ 、js里都有这玩意

   var x = 5
   while (x > 0) { // 循环条件,如果为真,就继续执行循环体
      print(x--) // 不断减小x的值,直到循环条件不达标,也就不会执行这个循环体了
   }
 
  // 输出54321

do while 循环

do while 和while的区别是,

while先检查是否有资格执行,如果有资格,就执行(没付款就不能享受服务)

do while 是先执行一次,再看看有没有资格做下一次,如果有,就继续,如果没有,就结束(先享受一次服务,再检查是否可以再次享受服务, 可以理解为一定会被白嫖一次)

  var x = 5
 
  // 先循环一次,再检查是不是要进行下一次循环
   do{
      print(x--) // 不断减小x的值
   }while (x>0) // 当x大于0的时候,继续循环