Kotlin 控制流

作者: CyrusChan | 来源:发表于2017-06-21 09:47 被阅读10次

    原文地址

    If Expression(if表达式)

    在Kotlin,if是一个表达式,也就是它返回一个值.因此这里没有三元操作符(condition?then:else),因为普通的if能做到这样。

    // Traditional usage 
    var max = a 
    if (a < b) max = b
    
    // With else 
    var max: Int
    if (a > b) {
        max = a
    } else {
        max = b
    }
     
    // As expression 
    val max = if (a > b) a else b
    

    If分支可以为代码块,并且最后一个表达式是块的值。

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

    如果你正在使用if作为一个表达式而不是陈述句(例如,返回它的值或者给它分配一个变量),那么这个表达式需要一个else分支。
    参看 grammar for if

    When Expression(When表达式)

    When替换switch操作符像c那样的语言,最简单的样式像这样:

    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> { // Note the block
            print("x is neither 1 nor 2")
        }
    }
    

    When表达式顺序的对比所有的分支直到一些分支的条件满足来匹配它的参数。When能被作为表达式或者陈述语句使用。如果它被当做表达式使用,满足的分支的值将变成全部表达式的值。如果它被当做陈述使用,独立分支的值被忽略。(就像if,每个分支能够成为一个块,并且它的值是最后块中表达式的值)</br>
    如果没有其他分支满足,Else分支被评估。如果when被当做一个表达式使用,else分支是强制性的,除非编译器能够证明所有可能的情况被分支条件所覆盖。</br>
    如果更多的分支应该以同一种方式去处理,分支条件可能和逗号结合使用。

    when (x) {
        0, 1 -> 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 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")
    }
    

    另一种可能性是检查值是或者不是一个特定的类型。注意,由于智能转换,你可以访问这个类型的方法和属性而不需要任何其他的检查

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

    when也能够被用于if-else if链的替换,如果没有参数被提供,分置条件是简单的boolean类型,一个分支被执行当它的条件为true的时候。

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

    参看 grammar for when

    For Loops

    For循环提供一个迭代器遍历任何东西。语法如下:

    for (item in collection) print(item)
    

    语法体可以是一个块

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

    正如之前提出的,for提供一个迭代器遍历任何东西,也就是

    • 有一个成员或者扩展函数iterator(),它的返回类型
      • 有一个成员或者扩展函数 next(), 并且
      • 有一个返回boolean类型成员或者扩展函数 hasNext() .

    所有的这些函数应该被标记为operator。
    一个for循环遍历一个数组被编译为不创建迭代器对象而是基于索引的循环。
    如果你想遍历一个数组或者一个列表通过索引,你可以以这种方式:

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

    注意 “遍历一个范围”被编译成没有其他额外的对象被创建最佳的实现。
    相反的,你可以使用withIndex库函数:

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

    While Loops(While循环)

    While和do…while像平常那样工作

    while (x > 0) {
        x--
    }
    
    do {
        val y = retrieveData()
    } while (y != null) // y is visible here!
    

    参看 grammar for while

    Break and continue in loops

    Kotlin支持传统的break和continue操作符在循环中。参看 Returns and jumps

    相关文章

      网友评论

        本文标题:Kotlin 控制流

        本文链接:https://www.haomeiwen.com/subject/lujzqxtx.html