<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國際加速解決方案。 廣告
                [TOC] # 返回和跳轉 Kotlin 有三種結構化跳轉表達式: * *return*:默認從最直接包圍它的函數或者[匿名函數](lambdas.html#匿名函數)返回。 * *break*:終止最直接包圍它的循環。 * *continue*:繼續下一次最直接包圍它的循環。 所有這些表達式都可以用作更大表達式的一部分: ```kotlin val s = person.name ?: return ``` 這些表達式的類型是 [Nothing 類型](http://www.kotlincn.net/docs/reference/exceptions.html#nothing-%E7%B1%BB%E5%9E%8B)。 ## Break 與 Continue 標簽 在 Kotlin 中任何表達式都可以用標簽(*label*)來標記。 標簽的格式為標識符后跟 `@` 符號,例如:`abc@`、`fooBar@`都是有效的標簽(參見[語法](http://www.kotlincn.net/docs/reference/grammar.html#label))。 要為一個表達式加標簽,我們只要在其前加標簽即可。 ```kotlin loop@ for (i in 1..100) { // …… } ``` 現在,我們可以用標簽限制 *break*{或者*continue*: ```kotlin loop@ for (i in 1..100) { for (j in 1..100) { if (……) break@loop } } ``` 標簽限制的 break 跳轉到剛好位于該標簽指定的循環后面的執行點。*continue*繼續標簽指定的循環的下一次迭代。 ## 標簽處返回 Kotlin 有函數字面量、局部函數和對象表達式。因此 Kotlin 的函數可以被嵌套。標簽限制的 *return*允許我們從外層函數返回。最重要的一個用途就是從 lambda 表達式中返回。回想一下我們這么寫的時候: ```kotlin //sampleStart fun foo() { listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return // 非局部直接返回到 foo() 的調用者 print(it) } println("this point is unreachable") } //sampleEnd fun main() { foo() } ``` 這個 *return*表達式從最直接包圍它的函數即 `foo` 中返回。(注意,這種非局部的返回只支持傳給[內聯函數](http://www.kotlincn.net/docs/reference/inline-functions.html)的 lambda 表達式。)如果我們需要從 lambda 表達式中返回,我們必須給它加標簽并用以限制 *return*。 ```kotlin //sampleStart fun foo() { listOf(1, 2, 3, 4, 5).forEach lit@{ if (it == 3) return@lit // 局部返回到該 lambda 表達式的調用者,即 forEach 循環 print(it) } print(" done with explicit label") } //sampleEnd fun main() { foo() } ``` 現在,它只會從 lambda 表達式中返回。通常情況下使用隱式標簽更方便。該標簽與接受該 lambda 的函數同名。 ```kotlin //sampleStart fun foo() { listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return@forEach // 局部返回到該 lambda 表達式的調用者,即 forEach 循環 print(it) } print(" done with implicit label") } //sampleEnd fun main() { foo() } ``` 或者,我們用一個[匿名函數](http://www.kotlincn.net/docs/reference/lambdas.html#%E5%8C%BF%E5%90%8D%E5%87%BD%E6%95%B0)替代 lambda 表達式。匿名函數內部的 *return*{: .keyword } 語句將從該匿名函數自身返回 ```kotlin //sampleStart fun foo() { listOf(1, 2, 3, 4, 5).forEach(fun(value: Int) { if (value == 3) return // 局部返回到匿名函數的調用者,即 forEach 循環 print(value) }) print(" done with anonymous function") } //sampleEnd fun main() { foo() } ``` 請注意,前文三個示例中使用的局部返回類似于在常規循環中使用 *continue*。并沒有 *break*的直接等價形式,不過可以通過增加另一層嵌套 lambda 表達式并從其中非局部返回來模擬: ```kotlin //sampleStart fun foo() { run loop@{ listOf(1, 2, 3, 4, 5).forEach { if (it == 3) return@loop // 從傳入 run 的 lambda 表達式非局部返回 print(it) } } print(" done with nested loop") } //sampleEnd fun main() { foo() } ``` 當要返一個回值的時候,解析器優先選用標簽限制的 return,即 ```kotlin return@a 1 ``` 意為“從標簽 `@a` 返回 1”,而不是“返回一個標簽標注的表達式 `(@a 1)`”。
                  <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>

                              哎呀哎呀视频在线观看