kotlin學(xué)習(xí)筆記(七)

返回與跳轉(zhuǎn)

Kotlin 有三種結(jié)構(gòu)跳轉(zhuǎn)表達(dá)式:

-- return

-- break 結(jié)束最近的閉合循環(huán)

-- continue 跳到最近的閉合循環(huán)的下一次循環(huán)

上述表達(dá)式都可以作為更大的表達(dá)式的一部分:

vals=person.name ?:return

這些表達(dá)式的類型是Nothing type

break 和 continue 標(biāo)簽

在 Kotlin 中表達(dá)式可以添加標(biāo)簽。標(biāo)簽通過 @ 結(jié)尾來表示,比如:abc@,fooBar@都是有效的(參看語法)。使用標(biāo)簽語法只需像這樣:

loop@for(iin1..100){//...}

現(xiàn)在我們可以用標(biāo)簽實(shí)現(xiàn) break 或者 continue 的快速跳轉(zhuǎn):

loop@for(iin1..100) {for(jini..100) {if(...)break@loop}}

break 是跳轉(zhuǎn)標(biāo)簽后面的表達(dá)式,continue 是跳轉(zhuǎn)到循環(huán)的下一次迭代。

返回到標(biāo)簽

在字面函數(shù),局部函數(shù),以及對象表達(dá)式中,函數(shù)可以在 Kotlin 中被包裹。return 允許我們返回到外層函數(shù)。最重要的例子就是從字面函數(shù)中返回,還記得我們之前的寫法嗎:

funfoo() {ints.forEach {if(it==0)returnprint(it)}}

return 表達(dá)式返回到最近的閉合函數(shù),比如foo(注意這樣非局部返回僅僅可以在內(nèi)聯(lián)函數(shù)中使用)。如果我們需要從一個字面函數(shù)返回可以使用標(biāo)簽修飾 return :

funfoo() {ints.forEach lit@ {if(it==0)return@litprint(it)}}

現(xiàn)在它僅僅從字面函數(shù)中返回。經(jīng)常用一種更方便的含蓄的標(biāo)簽:比如用和傳入的 lambda 表達(dá)式名字相同的標(biāo)簽。

funfoo() {ints.forEach {if(it==0)return@forEachprint(it)}}

另外,我們可以用函數(shù)表達(dá)式替代匿名函數(shù)。在函數(shù)表達(dá)式中使用 return 語句可以從函數(shù)表達(dá)式中返回。

funfoo() {ints.forEach(fun(value:Int){if(value==0)returnprint(value)})}

當(dāng)返回一個值時,解析器給了一個參考,比如(原文When returning a value, the parser gives preference to the qualified return, i.e.):

return@a1

表示 “在標(biāo)簽@a返回1” 而不是返回一個標(biāo)簽表達(dá)式(@a 1)

命名函數(shù)自動定義標(biāo)簽:

foo outer() {foo inner() {return@outer}}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容