<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 控制流:if、when、for、while [TOC] ## If 表達式 在 Kotlin 中,*if*是一個表達式,即它會返回一個值。因此就不需要三元運算符(條件 ? 然后 : 否則),因為普通的 *if*就能勝任這個角色。 ```kotlin // 傳統用法 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 ``` *if*的分支可以是代碼塊,最后的表達式作為該塊的值: ```kotlin val max = if (a > b) { print("Choose a") a } else { print("Choose b") b } ``` 如果你使用 *if*作為表達式而不是語句(例如:返回它的值或者把它賦給變量),該表達式需要有 `else` 分支。 參見 [if語法](http://www.kotlincn.net/docs/reference/grammar.html#ifExpression)。 ## When 表達式 *when*取代了類 C 語言的 switch 操作符。其最簡單的形式如下: ```kotlin when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { // 注意這個塊 print("x is neither 1 nor 2") } } ``` *when*將它的參數與所有的分支條件順序比較,直到某個分支滿足條件。*when*既可以被當做表達式使用也可以被當做語句使用。如果它被當做表達式,符合條件的分支的值就是整個表達式的值,如果當做語句使用,則忽略個別分支的值。(像 *if*一樣,每一個分支可以是一個代碼塊,它的值是塊中最后的表達式的值。) 如果其他分支都不滿足條件將會求值 *else*分支。如果 *when*作為一個表達式使用,則必須有 *else*分支,除非編譯器能夠檢測出所有的可能情況都已經覆蓋了[例如,對于 [枚舉(*enum*)類](http://www.kotlincn.net/docs/reference/enum-classes.html)條目與[密封(*sealed*)類](http://www.kotlincn.net/docs/reference/sealed-classes.html)子類型]。 如果很多分支需要用相同的方式處理,則可以把多個分支條件放在一起,用逗號分隔: ```kotlin when (x) { 0, 1 -> print("x == 0 or x == 1") else -> print("otherwise") } ``` 我們可以用任意表達式(而不只是常量)作為分支條件 ```kotlin when (x) { parseInt(s) -> print("s encodes x") else -> print("s does not encode x") } ``` 我們也可以檢測一個值在(*in*)或者不在(*!in*)一個[區間](http://www.kotlincn.net/docs/reference/ranges.html)或者集合中: ```kotlin 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") } ``` 另一種可能性是檢測一個值是(*is*)或者不是(*!is*)一個特定類型的值。注意:由于[智能轉換](http://www.kotlincn.net/docs/reference/typecasts.html#%E6%99%BA%E8%83%BD%E8%BD%AC%E6%8D%A2),你可以訪問該類型的方法與屬性而無需任何額外的檢測。 ```kotlin fun hasPrefix(x: Any) = when(x) { is String -> x.startsWith("prefix") else -> false } ``` *when*也可以用來取代 `if-else-if`鏈。如果不提供參數,所有的分支條件都是簡單的布爾表達式,而當一個分支的條件為真時則執行該分支: ```kotlin when { x.isOdd() -> print("x is odd") x.isEven() -> print("x is even") else -> print("x is funny") } ``` Since Kotlin 1.3, it is possible to capture *when*{: .keyword} subject in a variable using following syntax: ```kotlin fun Request.getBody() = when (val response = executeRequest()) { is Success -> response.body is HttpError -> throw HttpException(response.status) } ``` Scope of variable, introduced in *when*{: .keyword} subject, is restricted to *when*{: .keyword} body. 參見 [*when*語法](http://www.kotlincn.net/docs/reference/grammar.html#whenExpression)。 ## For 循環 *for*循環可以對任何提供迭代器(iterator)的對象進行遍歷,這相當于像 C# 這樣的語言中的 `foreach` 循環。語法如下: ```kotlin for (item in collection) print(item) ``` 循環體可以是一個代碼塊。 ```kotlin for (item: Int in ints) { // …… } ``` 如上所述,*for*可以循環遍歷任何提供了迭代器的對象。即: * 有一個成員函數或者擴展函數 `iterator()`,它的返回類型 * 有一個成員函數或者擴展函數 `next()`,并且 * 有一個成員函數或者擴展函數 `hasNext()` 返回 `Boolean`。 這三個函數都需要標記為 `operator`。如需在數字區間上迭代,請使用[區間表達式](http://www.kotlincn.net/docs/reference/ranges.html): ```kotlin fun main() { //sampleStart for (i in 1..3) { println(i) } for (i in 6 downTo 0 step 2) { println(i) } //sampleEnd } ``` 對區間或者數組的 `for` 循環會被編譯為并不創建迭代器的基于索引的循環。如果你想要通過索引遍歷一個數組或者一個 list,你可以這么做: ```kotlin fun main() { val array = arrayOf("a", "b", "c") //sampleStart for (i in array.indices) { println(array[i]) } //sampleEnd } ``` 或者你可以用庫函數 `withIndex`: ```kotlin fun main() { val array = arrayOf("a", "b", "c") //sampleStart for ((index, value) in array.withIndex()) { println("the element at $index is $value") } //sampleEnd } ``` 參見[*for*語法](http://www.kotlincn.net/docs/reference/grammar.html#forStatement)。 ## While 循環 *while* 與 *do*..*while* 照常使用 ```kotlin while (x > 0) { x-- } do { val y = retrieveData() } while (y != null) // y 在此處可見 ``` 參見[*while*語法](http://www.kotlincn.net/docs/reference/grammar.html#whileStatement). ## 循環中的 Break 與 continue 在循環中 Kotlin 支持傳統的 *break*{: .keyword } 與 *continue*{: .keyword } 操作符。參見[返回與跳轉](http://www.kotlincn.net/docs/reference/returns.html)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看