Kotlin的when、if 和循環語句

本文整理自:https://chiclaim.blog.csdn.net/article/details/88624808

一. when語句

在 Java 中有 switch 語句,在 Kotlin 中使用 when 來代替 switch

1) when 的基本語法

when(parameter){
    branch1 -> logic
    branch2 -> logic
}

when 括號裏是參數,參數是可選的。箭頭(->) 左邊是條件分支,右邊是對應的邏輯體

when 不需要向 switch 那樣需要加上 break 語句,符合條件自動具有 break 功能

如果邏輯體代碼比較多,可以放到花括號({})裏:

when(parameter){
    branch1 -> {
        //...
    }
    branch1 -> {
        //...
    }
}

如果要組合多個分支,可以使用逗號(,)分隔分支:

when(parameter){
    branch1,branch1 -> {
        //...
    }
}

2) 枚舉類對象作爲 when 參數

fun getMnemonic(color: Color) = when (color) {
     Color.RED -> "Richard" 
     Color.ORANGE -> "Of" 
     Color.YELLOW -> "York" 
     Color.GREEN -> "Gave" 
     Color.BLUE -> "Battle" 
     Color.INDIGO -> "In" 
     Color.VIOLET -> "Vain"
}

需要注意的是,when 使用枚舉對象作爲參數,需要把該枚舉類的所有對象列舉完

所以 枚舉對象作爲 when 參數不需要 else 分支

3) 任意對象作爲 when 參數

Kotlin 中的 when 比 Java 中的 switch 功能更強大

Java 的 switch 參數只能是 枚舉常量、字符串、整型或整型的包裝類型(浮點型不可以)

Kotlin 的 when 可以是任意對象:

fun mix(c1: Color, c2: Color) = when (setOf(c1, c2)) {
    
    setOf(RED, YELLOW) -> ORANGE 
    
    setOf(YELLOW, BLUE) -> GREEN 
    
    setOf(BLUE, VIOLET) -> INDIGO
    
    //需要處理 其他 情況
    else -> throw Exception("Dirty color") 
}

4) 無參數的 when 表達式

上面的 mix 函數比較低效,因爲每次比較的時候都會創建一個或多個 set 集合

如果該函數調用頻繁,會創建很多臨時對象

可以使用無參的 when 表達式來改造下:

fun mixOptimized(c1: Color, c2: Color) = when {
    (c1 == RED && c2 == YELLOW) || (c1 == YELLOW && c2 == RED) ->
        ORANGE
    (c1 == YELLOW && c2 == BLUE) || (c1 == BLUE && c2 == YELLOW) ->
        GREEN
    (c1 == BLUE && c2 == VIOLET) || (c1 == VIOLET && c2 == BLUE) ->
        INDIGO
    else -> throw Exception("Dirty color")
}

無參數的 when 表達式的條件分支必須是 boolean 類型

5) 智能類型轉換(smart casts)

在 Java 中對某個對象進行類型轉換的時候時候,需要通過 instanceof 來判斷是否可以被強轉

void test(Object obj) {
    if (obj instanceof String) {
        String str = (String) obj;
        str.substring(0, str.length() / 2);
    }
    //...
}

Kotlin 通過 is 關鍵字來判斷類型,並且編譯器會自動幫你做類型轉換

fun test(obj: Any) {
    if (obj is String) {
        // 不需要手動做類型轉換操作
        obj.substring(0, obj.length / 2)
    }
    //...
}

二. if判斷

if 表達式 用於條件判斷,在 Kotlin 中 如果判斷分支比較多,通常使用 when 來替代 if

fun test(obj: Any) {
    when (obj) {
        is String -> obj.substring(0, obj.length / 2)
        is Type2 -> ignore
        is Type3 -> ignore
    }
}

三. while循環

Kotlin 中的 while 和 do…while 循環和 Java 沒有什麼區別

while (condition) {
    /*...*/
}

do {
    /*...*/
} while (condition)

四. for循環

for 循環的語法和 Java 中的循環還是有些區別

// Java for 循環
for (int i = 0; i <= 100; i++) {
    System.out.println(i);
}

// 對應 Kotlin 版本
for(i in 0..100){
    println(i)
}

使用  操作符 表示一個區間,該區間是閉區間,包含開始和結束的元素

然後使用 in 操作符來遍歷這個區間

這個區間是從小到大的,如果開始的數字比結尾的還要大,則沒有意義

如果想要表示 半閉區間 ,即只包含頭部元素,不包含尾部

可以使用 until 操作符:

for(i in 0 until 100){
    println(i)
}

如果想要倒序遍歷,可以使用 downTo 關鍵字:

for(i in 100 downTo 0){
    println(i)
}

遍歷的時候 步長(step) 默認是 1,可以通過 step 關鍵字來指定步長

for( i in 100 downTo 0 step 2){
    println(i)
}

操作符  和 downTo 表示區間都是閉區間,包含首尾元素的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章