Kotlin學習第二彈,第一篇Kotlin學習筆記(一)---從零學習Kotlin了解了 Kotlin中最基礎的數據類型、顯式轉換、字符串、字符、布爾等。現在來了解Kotlin中控制流。
控制流
-
If表達式
在 Kotlin 中,if是一個表達式,它默認會返回一個值。 因此不需要三元運算符(條件 ? 然后 : 否則),因為普通的 if 就能勝任這個角色。
var maxB = b2
if (b2 < b3) maxB = b3 // 傳統用法
var maxC:Int //使用else
if (b2>b3){
maxC = b2
}else{
maxC = b3
}
var maxD = if (b2 > b3) b2 else b3 //表達式```
if的分支可以是代碼塊,最后的表達式作為該塊的值:
var maxE = if (b2 > b3){
println("max is $b2")
b2 //最后的表達式為代碼塊的值
}else{
println("max is $b3")
b3
}```
注意:如果你使用 if 作為表達式而不是語句(例如:返回它的值或者把它賦給變量),該表達式需要有 else 分支。
-
When 表達式
when 取代了類 Java 中的 switch 操作符。其最簡單的形式如下:
when (x) {
1 -> println("x = $x")
3 -> println("x = 3")
else -> { //其他情況,使用else操作
println("x != 1 && x != 3")
}
}```
when 將它的參數和所有的分支條件順序比較,直到某個分支滿足條件。 when 既可以被當做表達式使用也可以被當做語句使用。如果它被當做表達式, 符合條件的分支的值就是整個表達式的值,如果當做語句使用, 則忽略個別分支的值。(像 if 一樣,每一個分支可以是一個代碼塊,它的值是塊中最后的表達式的值。)
如果其他分支都不滿足條件將會求值 else 分支。 如果 when 作為一個表達式使用,則必須有 else 分支, 除非編譯器能夠檢測出所有的可能情況都已經覆蓋了。
如果很多分支需要用相同的方式處理,則可以把多個分支條件放在一起,用逗號分隔:
when (x) {
1,3 -> println("x == 0 or x == 3")
else -> { //其他情況,使用else操作
println("x != 1 && x != 3")
}
}```
我們可以用任意表達式(而不只是常量)作為分支條件:
when (x) {
x.compareTo(5) -> println(x.toString())
else -> { //其他情況,使用else操作
println("x != 1 && x != 3")
}
}```
我們也可以檢測一個值在(*in*)或者不在(*!in*)一個[區間](http://www.kotlincn.net/docs/reference/ranges.html)或者集合中:
when (x) {
in 1..10 -> println("x <= 10")
else -> {
println("x > 10")
}
}```
另一種可能性是檢測一個值是(is)或者不是(!is)一個特定類型的值。注意: 由于智能轉換,你可以訪問該類型的方法和屬性而無需任何額外的檢測。
fun getString(name: Any) = when (name) {
is String -> name.toString()
else -> {
false
}
}```
when 也可以用來取代 if-else if鏈。 如果不提供參數,所有的分支條件都是簡單的布爾表達式,而當一個分支的條件為真時則執行該分支:
var aaaa: String? = "44"
when {
aaaa!!.length > 5 -> println("aaaa.length = ${aaaa!!.length}")
c2 > 3 -> println("c2 > 3")
else -> {
println("other")
}
}```
-
For 循環
for 循環可以對任何提供迭代器(iterator)的對象進行遍歷,語法如下:
for (item in collection) print(item)```
示例:
val list = listOf("apple", "google", "facebook")
fun testFor() {
for (item: String in list) {
println(item)
}
}```
如果你想要通過索引遍歷一個數組或者一個 list,你可以這么做:
val list = listOf("apple", "google", "facebook")
fun testFor() {
for (i in list) {
println(i)
}
}```
- **While 循環**
while 和 do..while 照常使用
val b1: Byte = 5
while (b1 > 5) {
println(b1.toString())
}
do {
b1.unaryPlus()
} while (b1 > 5)```