簡體   English   中英

kotlin 返回布爾函數

[英]kotlin return boolean function

我對布爾返回類型函數進行了一些研究,發現與可空檢查一起使用更安全。 我有一些理解問題,編譯器不喜歡我所做的。 我也試過 if 語句,它以某種方式只返回 false。 任何人都可以請清理我的頭嗎? 謝謝!

    fun check(list:ArrayList<String>): Boolean {
    var test: Boolean?= null
    for (i in list) {
        when (i=="a") {
            true -> test == true
            false -> test == false
        }
    }
    return test!!
}

由於此函數僅返回 true 或 false,因此不應將變量test設為可空。 但是如果刪除? 並且= null因為它不能保證你的 for 循環中的代碼會被調用(因為列表可能是空的)。

至於為什么它給你錯誤的結果,那是因為你正在改變列表中每個項目的test值,所以最終值只取決於列表中的最后一個元素。 此外,如果列表為空,則test將保持為空,並且在使用test!!時會出現異常test!! .

我不知道您是想查看列表中的任何元素是“a”還是所有元素都是“a”,但為了便於討論,我假設它是第一個。 所以這里的策略是將 false 設為默認值,如果發現任何元素為“a”,則將其更改為 true。 一旦你找到一個,就沒有理由繼續檢查,這樣你就可以跳出循環。

var test = false // not nullable
for (i in list)
    if (i == "a") {
        test = true
        break
    }
return test

作為旁注,Kotlin 有一個 List 的高階函數,用於檢查滿足 lambda 的任何元素,因此上面的代碼可以替換為

return list.any { it == "a" }

另一個注意事項:如果您根據某些標准設置布爾值,則 when 語句是多余的,並且會使您的代碼更加復雜。 您可以用test = i == "a"替換您的 when 語句並具有等效的行為(盡管正如您發現的那樣,這不是正確的行為)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM