kotlin 基礎 控制流

2021-09-26 21:15:11 字數 2334 閱讀 4017

在 kotlin 中, if 是乙個表示式, 也就是說, 它有返回值. 因此, kotlin 中沒有三元運算子(條件 ? then 分支返回值 : else 分支返回值), 因為簡單的 if 表示式完全可以實現同樣的任務。

// if 的傳統用法

var max = a 

if (a < b) max = b 

// 使用 else 分支的方式 

var max: int

if (a > b)  else

// if 作為表示式使用

val max = if (a > b) a else b

if 的分支可以是多條語句組成的**段, **段內最後乙個表示式的值將成為整個**段的返回值:

val max = if (a > b)  else
如果你將 if 作為表示式來使用(比如, 將它的值作為函式的返回值, 或將它的值賦值給乙個變數), 而不是用作普通的流程控制語句, 這種情況下 if 表示式必須有 else 分支。

when 替代了各種 c 風格語言中的 switch 操作符。最簡單的形式如下例:

when (x) 

}

when 語句會將它的引數與各個分支逐個匹配, 直到找到某個分支的條件成立。when 可以用作表示式, 也可以用作流程控制語句。 如果用作表示式, 滿足條件的分支的返回值將成為整個表示式的值。如果用作流程控制語句, 各個分支的返回值將被忽略。 (與 if 類似, 各個分支可以是多條語句組成的**段, **段內最後乙個表示式的值將成為整個**段的值。)

如果其他所有分支的條件都不成立, 則會執行 else 分支。如果 when 被用作表示式, 則必須有 else 分支, 除非編譯器能夠證明其他分支的條件已經覆蓋了所有可能的情況。

如果對多種條件需要進行相同的處理, 那麼可以對乙個分支指定多個條件, 用逗號分隔:

when (x)
在分支條件中, 我們可以使用任意的表示式(而不僅僅是常數值)

when (x)
我們還可以使用 in 或 !in 來檢查乙個值是否屬於乙個 範圍, 或者檢查是否屬於乙個集合:

when (x)
還可以使用 is 或 !is 來檢查乙個值是不是某個型別. 注意, 由於 kotlin 的 智慧型別轉換 功能, 進行過型別判斷之後, 你就可以直接訪問這個型別的方法和屬性, 而不必再進行顯式的型別檢查.

val hasprefix = when(x)
when 也可以用來替代 if-else if 串. 如果沒有指定引數, 那麼所有的分支條件都應該是單純的布林表示式, 當條件的布林表示式值為 true 時, 就會執行對應的分支:

when
任何值, 只要能夠產生乙個迭代器(iterator), 就可以使用 for 迴圈進行遍歷. 語法如下:

for (item in collection) print(item)
迴圈體可以是多條語句組成的**段.

for (item: int in ints)
前面提到過, 凡是能夠產生迭代器(iterator)的值, 都可以使用 for 進行遍歷, 也就是說, 遍歷物件需要滿足以下條件:

存在乙個成員函式- 或擴充套件函式 iterator(), 它的返回型別應該:

存在乙個成員函式- 或擴充套件函式 next(), 並且

存在乙個成員函式- 或擴充套件函式 hasnext(), 它的返回型別為 boolean 型別.

上述三個函式都需要標記為 operator.

for 迴圈遍歷陣列時, 會被編譯為基於陣列下標的迴圈, 不會產生迭代器(iterator)物件.

如果你希望使用下標變數來遍歷陣列或 list, 可以這樣做:

for (i in array.indices)
注意, 上例中的 「在數值範圍內的遍歷」 會在編譯期間進行優化, 執行時不會產生額外的物件例項.

或者, 你也可以使用 withindex 庫函式:

for ((index, value) in array.withindex())
while 和 do..while 的功能與其他語言一樣:

while (x > 0) 

do  while (y != null) // y is visible here!

kotlin 的迴圈支援傳統的 break 和 continue 操作符。

Kotlin筆記(四)控制流

在 kotlin 中,if是乙個表示式,即它會返回乙個值 傳統用法 var max a if a b max b with else var max int if a b elseif的分支可以是 塊,最後的表示式作為該塊的值 作為表示式 注意if語句作為表示式必須有else val max if ...

Kotlin 迴圈控制

for 迴圈可以對任何提供迭代器 iterator 的物件進行遍歷,語法如下 for item incollection print item 迴圈體可以是乙個 塊 for item int inints 如上所述,for 可以迴圈遍歷任何提供了迭代器的物件。如果你想要通過索引遍歷乙個陣列或者乙個 ...

Kotlin 迴圈控制

for 迴圈可以對任何提供迭代器 iterator 的物件進行遍歷,語法如下 for item in collection print item 迴圈體可以是乙個 塊 for item int in ints 如上所述,for 可以迴圈遍歷任何提供了迭代器的物件。如果你想要通過索引遍歷乙個陣列或者乙...