天天看點

Kotlin for Android(四)Kotlin控制流

IF 表達式

在 Kotlin 中,if是一個表達式,即它會傳回一個值。 是以就不需要三元運算符(條件 ? 然後 : 否則),因為普通的 if 就能勝任這個角色。

var a:Int=
    var b:Int=
    //Kotlin使用if語句代替三元運算符
    var max=if(a>b) a else b
    //三元運算符
    var max=a>b?a:b
           

if的分支可以是代碼塊,最後的表達式作為該塊的值:

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

使用 in 運算符來檢測某個數字是否在指定區間内,區間格式為 x..y :

fun main(args: Array<String>) {
    val x = 
    val y = 
    if (x in ) {
        println("x 在區間内")
    }
}
           

注意他和for循環的差別

When 表達式

when 取代了類 C 語言的 switch 操作符。其最簡單的形式如下:

when (x) {
         -> println("x=1")
         -> println("x=2")
        else -> {
            println("default x")
        }
    }
           

when 将它的參數和所有的分支條件順序比較,直到某個分支滿足條件。 when 既可以被當做表達式使用也可以被當做語句使用。如果它被當做表達式, 符合條件的分支的值就是整個表達式的值,如果當做語句使用, 則忽略個别分支的值。(像 if 一樣,每一個分支可以是一個代碼塊,它的值是塊中最後的表達式的值。)

如果其他分支都不滿足條件将會求值 else 分支。 如果 when 作為一個表達式使用,則必須有 else 分支, 除非編譯器能夠檢測出所有的可能情況都已經覆寫了。

如果很多分支需要用相同的方式處理,則可以把多個分支條件放在一起,用逗号分隔:

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

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

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

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

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

when 也可以用來取代 if-else if鍊。 如果不提供參數,所有的分支條件都是簡單的布爾表達式,而當一個分支的條件為真時則執行該分支:

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

For 循環

for 循環可以對任何提供疊代器(iterator)的對象進行周遊,文法如下:

for (item in collection) print(item)
           

如上所述,for 可以循環周遊任何提供了疊代器的對象。

如果你想要通過索引周遊一個數組或者一個 list,你可以這麼做:

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

while 與 do…while 循環

while是最基本的循環,它的結構為:

while( 布爾表達式 ) {
  //循環内容
}
           

do…while 循環 對于 while 語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。

do…while 循環和 while 循環相似,不同的是,do…while 循環至少會執行一次。

do {
       //代碼語句
}while(布爾表達式);
           

傳回和跳轉

Kotlin 有三種結構化跳轉表達式:

  • return。預設從最直接包圍它的函數或者匿名函數傳回。
  • break。終止最直接包圍它的循環。
  • continue。繼續下一次最直接包圍它的循環。
fun main(args: Array<String>) {
    for (i in ) {
        if (i==) continue  // i 為 3 時跳過目前循環,繼續下一次循環
        println(i)
        if (i>) break   // i 為 6 時 跳出循環
    }
}