使用Kotlin開發(fā)Android--If、When、Loop的運(yùn)用

上一篇:常見的集合函數(shù)運(yùn)用

今天我們一起來(lái)學(xué)習(xí)一下在Kotlin中,if語(yǔ)句、When語(yǔ)句以及Loop循環(huán)語(yǔ)句的使用。

If語(yǔ)句

首先要講的就是If語(yǔ)句的使用,我們先來(lái)看一下If語(yǔ)法,如下:

if (表達(dá)式) { 結(jié)構(gòu)體 } else { 結(jié)構(gòu)體 }

Demo代碼如下:

/**
 * if語(yǔ)句 2017/4/5 09:57
 * PS: 使用 if 作為表達(dá)式而不是語(yǔ)句(例如:返回它的值或者 把它賦給變量),該表達(dá)式需要有 else 分支。
 */
class TestIf {

    /**
     * 傳統(tǒng)用法 2017/4/5 09:57
     */
    fun if1() {
        var isResult = false
        if (isResult) {
            println("True")
        } else {
            println("False")
        }
    }

    /**
     * 表達(dá)式 2017/4/5 09:58
     */
    fun if2() {
        var isResult = false
        var str = if (isResult) "True" else "False" // 類似于三元運(yùn)算符 2017/4/5 09:59

        println(str)
    }

    /**
     * 代碼塊 2017/4/5 10:00
     */
    fun if3() {
        var isResult = true
        var str = if (isResult) {
            println("True")
            "aaaaa" // 相當(dāng)于返回 2017/4/5 10:07
        } else {
            println("False")
            "bbbbb"
        }

        println(str)
    }

}

官方介紹

在 Kotlin 中,if是一個(gè)表達(dá)式,即它會(huì)返回一個(gè)值。 因此就不需要三元運(yùn)算符(條件 ? 然后 : 否則),因?yàn)槠胀ǖ?if 就能勝任這個(gè)角色。

// 傳統(tǒng)用法
var max = a 
if (a < b) max = b

// With else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}

// 作為表達(dá)式
val max = if (a > b) a else b

if的分支可以是代碼塊,最后的表達(dá)式作為該塊的值:

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

如果你使用 if 作為表達(dá)式而不是語(yǔ)句(例如:返回它的值或者 把它賦給變量),該表達(dá)式需要有 else 分支。

When語(yǔ)句

首先來(lái)看一下語(yǔ)法,如下:

when (表達(dá)式) { 結(jié)構(gòu)體 }

Demo代碼如下:

/**
 * When語(yǔ)句,功能類似于Switch 2017/4/5 10:13
 */
class TestWhen {

    /**
     * 常用1 2017/4/5 10:13
     */
    fun when1() {
        var value = 1
        when(value) {
            1 -> println("11111")
            2 -> println("22222")
            else -> {
                println("====else====")
            }
        }
    }

    /**
     * 常用2 2017/4/5 10:15
     * PS: 很多分支需要用相同的方式處理,則可以把多個(gè)分支條件放在一起,用逗號(hào)分隔。
     */
    fun when2() {
        var value = 1
        when(value) {
            1, 2 -> println("1111122222")
            else -> {
                println("====else====")
            }
        }
    }

    /**
     * 常用3 2017/4/5 10:17
     * PS: 任意表達(dá)式(而不只是常量)作為分支條件。
     */
    fun when3() {
        var value = "1"
        when(value) {
            ("" + 1) -> println("11111")
            else -> {
                println("====else====")
            }
        }
    }

    /**
     * 常用4 2017/4/5 10:20
     * 用 in 或者 !in 檢測(cè)一個(gè)值是否在該區(qū)間或者集合中。
     */
    fun when4() {
        var value = 1
        var lst = listOf(2, 3)
        when(value) {
            !in lst -> println("!in list")
            in 1..10 -> println("in 1..10")
            else -> {
                println("====else====")
            }
        }
    }

    /**
     * 常用5 2017/4/5 10:24
     * 用 is 或者 !is 檢測(cè)一個(gè)值的類型。
     */
    fun when5() {
        var value = 1
        var result = when(value) {
            is Int -> "Value type is Int."
            !is Int -> "Value type not is Int."
            else -> {
                "====else===="
            }
        }

        println(result)
    }

    /**
     * 常用6 2017/4/5 10:27
     * 不提供參數(shù),用來(lái)取代 if-else。
     */
    fun when6() {
        var isResult = true
        when {
            isResult -> println("True")
            else -> {
                println("====else====")
            }
        }
    }

}

官方介紹

when 取代了類 C 語(yǔ)言的 switch 操作符。其最簡(jiǎn)單的形式如下:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意這個(gè)塊
        print("x is neither 1 nor 2")
    }
}

when 將它的參數(shù)和所有的分支條件順序比較,直到某個(gè)分支滿足條件。 when 既可以被當(dāng)做表達(dá)式使用也可以被當(dāng)做語(yǔ)句使用。如果它被當(dāng)做表達(dá)式, 符合條件的分支的值就是整個(gè)表達(dá)式的值,如果當(dāng)做語(yǔ)句使用, 則忽略個(gè)別分支的值。(像 if 一樣,每一個(gè)分支可以是一個(gè)代碼塊,它的值 是塊中最后的表達(dá)式的值。)+

如果其他分支都不滿足條件將會(huì)求值 else 分支。 如果 when 作為一個(gè)表達(dá)式使用,則必須有 else 分支, 除非編譯器能夠檢測(cè)出所有的可能情況都已經(jīng)覆蓋了。
如果很多分支需要用相同的方式處理,則可以把多個(gè)分支條件放在一起,用逗號(hào)分隔:

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

我們可以用任意表達(dá)式(而不只是常量)作為分支條件:

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

我們也可以檢測(cè)一個(gè)值在(***in
)或者不在(!in
***)一個(gè)區(qū)間或者集合中:

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

另一種可能性是檢測(cè)一個(gè)值是(***is
)或者不是(!is
***)一個(gè)特定類型的值:

val hasPrefix = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

when 也可以用來(lái)取代 if-else if鏈。 如果不提供參數(shù),所有的分支條件都是簡(jiǎn)單的布爾表達(dá)式,而當(dāng)一個(gè)分支的條件為真時(shí)則執(zhí)行該分支:

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

Loop循環(huán)語(yǔ)句

循環(huán)語(yǔ)句有3類,for、while、do...while,語(yǔ)法如下:
for (item in 集合) { 結(jié)構(gòu)體 }
while (表達(dá)式) { 結(jié)構(gòu)體 }
do { 結(jié)構(gòu)體 } while (表達(dá)式)

Demo代碼如下:

/**
 * 循環(huán)語(yǔ)句 2017/4/5 10:47
 */
class TestLoop {

    /**
     * 遍歷值 2017/4/5 10:48
     */
    fun for1() {
        var lst = listOf(1, 2, 3)
        for (idx in lst) {
            println("idx = " + idx)
        }
    }

    /**
     * 遍歷索引 2017/4/5 10:48
     */
    fun for2() {
        var lst = listOf(3, 4, 5)
        for (i in lst.indices) {
            println("i = " + i)
        }
    }

    /**
     * 遍歷索引/值 2017/4/5 10:50
     */
    fun for3() {
        var lst = listOf(3, 4, 5)
        for ((i, values) in lst.withIndex()) {
            println("i = " + i)
            println("values = " + values)
        }
    }

    /**
     * 常用循環(huán) 2017/4/5 10:52
     * PS: 跟java一樣
     */
    fun while1() {
        var value = 5
        while (value > 0) {
            println("values = " + value)
            value--
        }
    }

    /**
     * do-while 2017/4/5 10:54
     * PS: 跟java一樣
     */
    fun doWhile() {
        var value = 5
        do {
            println("values = " + value)
            value--
        } while (value > 0)
    }

}

官方介紹

while、do...while的使用其實(shí)跟Java是一樣的,這里就不講了。主要看下for語(yǔ)句的使用。

循環(huán)體可以是一個(gè)代碼塊:

for (item: Int in ints) {
    // ……
}

如上所述,for 可以循環(huán)遍歷任何提供了迭代器的對(duì)象。即:

有一個(gè)成員函數(shù)或者擴(kuò)展函數(shù) iterator(),它的返回類型
有一個(gè)成員函數(shù)或者擴(kuò)展函數(shù) next(),并且
有一個(gè)成員函數(shù)或者擴(kuò)展函數(shù) hasNext() 返回 Boolean。
這三個(gè)函數(shù)都需要標(biāo)記為 operator。

對(duì)數(shù)組的 for 循環(huán)會(huì)被編譯為并不創(chuàng)建迭代器的基于索引的循環(huán)。
如果你想要通過(guò)索引遍歷一個(gè)數(shù)組或者一個(gè) list,你可以這么做:

for (i in array.indices) {
    print(array[i])
}

注意這種“在區(qū)間上遍歷”會(huì)編譯成優(yōu)化的實(shí)現(xiàn)而不會(huì)創(chuàng)建額外對(duì)象。

或者你可以用庫(kù)函數(shù) withIndex:

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

以上對(duì)for、while、do...while的介紹以及使用就講完了。其實(shí)就是在官方給的學(xué)習(xí)資料中進(jìn)行更詳細(xì)的擴(kuò)展,希望能對(duì)學(xué)習(xí)Kotlin的朋友們有所幫助。

謝謝支持~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容