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