Kotlin 控制流篇
文章目录
- Kotlin 控制流篇
-
- 前言
- 正文
-
- 控制流(IF、when、for、while)
-
- 1. IF 表达式
- 2. while 表达式
- 3. when 表达式
- 4. kotlin for 语句,step 步长、downTo 递减
- 5. 使用区间 range
- 返回和跳转
-
- 1. return 配合 ?:
- 2. kotlin 的标签
前言
正文
控制流(IF、when、for、while)
1. IF 表达式
// 传统用法
var max = a
if (a < b) max = b
// With else
var max: Int
if (a > b) {
max = a
} else {
max = b
}
// 作为表达式
val max = if (a > b) a else b
//简化方法
fun maxOf(a: Int, b: Int) = if (a > b) a else b
2. while 表达式
val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
3. when 表达式
//when 取代 switch
// 类似 Java 的switch case
switch(x){
case 1:
System.out.println("1");
break;
default: break;
}
when (x) {
1 -> println("1")
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
//[1] 类似 java 的 switch case ,但是会自动补上 break
when(x){
1 -> {}
2 -> {}
// [3] 多个条件,同份逻辑
3,4 -> {}
// [4] in 监测是否在区间内
in 10..20 -> {}
// [5] not in
!in 21..25 -> {}
// [6] 使用 is 进行特定类型监测
is String -> {}
else -> {}
}
//[2] when 可以有返回值
val value:Int = when(x) {
1 -> { x+1 }
2 -> { x+ 2}
else -> { x+ 5}
}
4. kotlin for 语句,step 步长、downTo 递减
//[1] for 遍历
val range2:IntRange = 0 until 100
for (i in range2){
print("$i _")
}
//[2] step 设置步长
val range2:IntRange = 0 until 100
for (i in range2 step 2){
print("$i _")
}
//[3] downTo 递减区间
for(i in 4 downTo 1){}
5. 使用区间 range
//[1] in 运算符检测数字是否在区间
val x = 10
val y = 9
if (x in 1..y+1) {
println("fits in range")
}
//[2] !in 检测不在
if (-1 !in 0..list.lastIndex) {
println("-1 is out of range")
}
//[3] step 跳步迭代
for (x in 1..10 step 2) {
print(x)
}
println()
//[4] downTo 降区间
for (x in 9 downTo 0 step 3) {
print(x)
}
返回和跳转
1. return 配合 ?:
//[1] 不存在则返回
val s = person.name ?: return
2. kotlin 的标签
//[2] 表达式可添加标签,如 [email protected] 、[email protected]
[email protected] for (i in 1..100) {
// ……
}
//[3] 标签限制 break 、continue
[email protected] for (i in 1..100) {
for (j in 1..100) {
if (……) break@loop
}
}
//[4] 输出 1245
fun foo() {
listOf(1, 2, 3, 4, 5).forEach {
if (it == 3) return@forEach // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
print(it)
}
print(" done with implicit label")
}