Kotlin基本语法-控制流

If表达式

在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色。

// 传统用法
 var max = a 
 if (a < b) max = b 
 // With else 
 var max: Int
 if (a > b) {
     max = a
 } else {
     max = b
 }
 // 作为表达式
 val max = if (a > b) a else b
 //分支可以为代码块,最后的表达式作为该块的值
 val max = if (a > b) {
     print("Choose a")
     a
 } else {
     print("Choose b")
     b
}

when表达式

when取代了C语言的switch的操作符。

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}
  • when 将它的参数与所有分支顺序比较,直到某个分支满足条件。
  • 如果多个分支需要相同的方式处理,可以放在一起用逗号分隔。
  • 可以用任意表达式(而不只是常量)作为分支条件
    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")
    }
  • when也可以能检测一个值(is)或者不是(!is)一个特定的类型的值。 注意:由于智能转换,你可以访问该类型的方法与属性而无需任何额外的检测。
    fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
    }
  • Kotlin1.3之后,可以将when的主语捕获到变量中
    fun Request.getBody() =
    when (val response = executeRequest()) {
        is Success -> response.body
        is HttpError -> throw HttpException(response.status)
    }</pre>

For循环

和Swift类似。具体参考Kotlin For循环

while循环

照常使用

返回和跳转

Kotlin 有三种结构化跳转表达式

  • return。默认从最直接包围它的函数或者匿名函数返回。
  • break。终止最直接包围它的循环。
  • continue。继续下一次最直接包围它的循环。
  • break和continue标签:
    • 在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟@符号,例如:abc@、fooBar@都是有效的标签(参见语法)。 要为一个表达式加标签,我们只要在其前加标签即可。
    • 作用:用标签来限制break和continue(可以根据标签来控制多层循环中,指定的break和continue)
      loop@ for (i in 1..100) {
      for (j in 1..100) {
      if (……) break@loop
      }
      }
  • 返回到标签:返回到制定标签的方法。