和 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")
和其他语言的不同之处,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
类似 其他语言里的 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")
}
}
不需要其他语言里的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是啥")
}
}
用逗号分割多个要匹配的结果
val a = 2
when (a) {
1,2,3 -> { // 用逗号分割多个要匹配的结果
print("x等于 1 或者2 或者3")
}
5 -> {
print("x == 5")
}
else -> {
print("x是啥")
}
}
配合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")
}
这样有点当成 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也可以像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 (item in 1..3) print(item) // 输出123
for (item in 1..3) {print(item)} // 输出123
// step 步长
for (item in 1..9 step 2 ) print(item) // 输出13579 , step 2表示,每次跨越2个数,即步长为2
for (item in 9 downTo 0 ) print(item) // 输出 9876543210
// 倒数 结合 步长
for (item in 9 downTo 0 step 2 ) print(item) // 输出 97531
半开区间(包含起始值,但不包含结束值)
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
我没记错的话,c、c++ 、js里都有这玩意
var x = 5
while (x > 0) { // 循环条件,如果为真,就继续执行循环体
print(x--) // 不断减小x的值,直到循环条件不达标,也就不会执行这个循环体了
}
// 输出54321
do while 和while的区别是,
while先检查是否有资格执行,如果有资格,就执行(没付款就不能享受服务)
do while 是先执行一次,再看看有没有资格做下一次,如果有,就继续,如果没有,就结束(先享受一次服务,再检查是否可以再次享受服务, 可以理解为一定会被白嫖一次)
var x = 5
// 先循环一次,再检查是不是要进行下一次循环
do{
print(x--) // 不断减小x的值
}while (x>0) // 当x大于0的时候,继续循环