kotlin循環(huán)

最近在寫項目時遇到了一個關(guān)于kotlin跳出循環(huán)的問題,由于項目原因,直接拿下面的一個簡單的例子做demo吧。

一. 問題

首先,我們先看一個正常的函數(shù)跳出循環(huán),大家都會,我就直接貼代碼:

val list = listOf(1, 2, 3, 4, 5)
for (num in list) {
    if (count == 3) {
        break // 退出循環(huán)
    }
    // 打印 1和2
    println(num)
}

實際開發(fā)過程中,我使用了list.forEach函數(shù)

// label@標簽
list.forEach label@{
    if (it == 3) {
        // 在這里return之后,實際上并沒有跳出循環(huán)
        return@label
    }
    // 打印 1 2 4 5
    println("label:$it")
}

上述例子中,在調(diào)用return@label之后,實際并沒有跳出循環(huán),我們想要的是當it值為3時,就跳出循環(huán),打印1、2,實際打印1、2、4、5,跟continue一樣

for (i in list) {
    if (i == 3) {
        continue
    }
    println("continue:$i")
}

那么為什么forEach函數(shù)不可用跳出循環(huán)?

forEach 是一個高階函數(shù),它接收一個 lambda 表達式作為參數(shù),并將其應用于集合中的每個元素。因為 forEach 僅僅是對集合中的\color{red}{每個元素進行遍歷,所以它并沒有返回值}。

最后講下list.forEach和for循環(huán)有什么區(qū)別

  1. 語法結(jié)構(gòu)不同list.forEach 是一個高階函數(shù),它接收一個 lambda 表達式作為參數(shù)。而 for (num in list) 是一個基于迭代器的語法結(jié)構(gòu),它使用 in 關(guān)鍵字來遍歷集合中的元素。

  2. 返回值不同list.forEach 沒有返回值,它僅僅是將 lambda 表達式應用于集合中的每個元素。而 for (num in list) 返回遍歷過程中的每個元素,你可以使用這個返回值來做其他操作。

  3. 可讀性不同list.forEach 的語法結(jié)構(gòu)更加簡潔,特別適合對集合進行簡單的操作。而 for (num in list) 的語法結(jié)構(gòu)更加靈活,你可以在其中編寫任意的邏輯處理。

  4. 可讀性不同list.forEach 的語法結(jié)構(gòu)更加簡潔,特別適合對集合進行簡單的操作。而 for (num in list) 的語法結(jié)構(gòu)更加靈活,你可以在其中編寫任意的邏輯處理。

二. 結(jié)論

  1. 簡單地對集合中的元素進行遍歷就使用list.forEach
  2. 遍歷集合做復雜邏輯處理或者需要返回遍歷的元素使用 for (num in list)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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