有个先贤说过
掌握了规则就掌握了一切。
我认为在编程语言中掌握了 控制语句
就算是掌握了编程语言(在 FP
中效果打折)。所以我们今天开始要去探索编程语言中至为重要的 Control Flow
部分。
if 表达式 1 2 3 4 var n = 34 if (n % 2 == 0 ) { println("$n is even" ) }
1 2 3 4 5 6 var max: Int if (a > b) { max = a } else { max = b }
1 2 3 4 5 6 7 val max = if (a > b) { print("Choose a" ) a } else { print("Choose b" ) b }
敲黑板: Kotlin
和 Java
不同之处在于 if
的分支可以是代码块,最后的表达式
作为该块的值,如示例代码中的 a
和 b
。
When 表达式 1 2 3 4 5 6 7 when (x) { 1 -> print("x == 1" ) 2 -> print("x == 2" ) else -> { print("x is neither 1 nor 2" ) } }
when
将它的参数和所有的分支条件 顺序 比较,直到某个分支满足条件,如果其他分支都不满足条件将会求值 else
分支。 当然我们也可以把 多个分支组合 在一起比如如下:
1 2 3 4 5 6 var dayOfWeek = 6 when (dayOfWeek) { 1 , 2 , 3 , 4 , 5 -> println("Weekday" ) 6 , 7 -> println("Weekend" ) else -> println("Invalid Day" ) }
甚至可以是在一个 Range
内
1 2 3 4 5 6 var dayOfMonth = 5 when (dayOfMonth) { in 1. .7 -> println("We're in the first Week of the Month" ) !in 15. .21 -> println("We're not in the third week of the Month" ) else -> println("none of the above" ) }
For 循环 for
循环可以对任何提供 迭代器(iterator)
的对象进行遍历
1 2 3 for (value in 1. .10 ) { print("$value " ) }
1 2 3 4 5 var primeNumbers = intArrayOf(2 , 3 , 5 , 7 , 11 )for (number in primeNumbers) { print("$number " ) }
1 2 3 4 5 6 7 val max = if (a > b) { print("Choose a" ) a } else { print("Choose b" ) b }
While 循环 1 2 3 4 5 6 7 while (x > 0 ) { x-- } do { val y = retrieveData() } while (y != null )
与 Java
一致
Break和continue 与 Java
一致