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

相关文章

  • 9.控制流(theControlFlow)

    控制流 kotlin_控制流 swift控制流

  • Kotlin基础知识(三):控制语句

    链接:Kotlin——初级篇(四):控制语句详解连接:控制流:if、when、for、while - Kotlin...

  • Kotlin(控制流)

    流程控制: if , when , for , while if 表达式 在 Kotlin 中,if 是带有返回值...

  • Kotlin控制流

    表达式和语句的区别: 表达式有值,语句没有值, 能作为函数参数即为表达式,否则为语句。 C语言中的控制结构为语句。...

  • Kotlin 控制流

    和Java一样, Kotlin 支持常用的控制流: if else, for, while, when, brea...

  • Kotlin 控制流

    原文地址 If Expression(if表达式) 在Kotlin,if是一个表达式,也就是它返回一个值.因此这里...

  • kotlin控制流

    没有三目运算符? 因为if可以有返回值 没有switch case,替换成了when

  • kotlin控制流

    一:if表达式 在kotlin中if是表达式,它会返回一个值,所以kotlin中无需三元操作符,if的分之可以是代...

  • Kotlin 学习总结

    Kotlin 学习笔记 基本数值类型 集合 控制流 函数 类

  • kotlin的控制流

    for循环   kotlin的for循环相比Java做了一些调整,个人没有感觉有什么优越性……基本的语法就是这样:...

网友评论

    本文标题:Kotlin 控制流

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