kotlin学习笔记-条件与循环

发布时间:

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的时候,继续循环

2025 © 糊涂.