Kotlin返回布尔函数

时间:2019-12-14 23:19:58

标签: function kotlin

我对布尔返回类型函数进行了一些研究,发现使用可空检查更安全。我有一些理解问题,编译器不喜欢我的工作。我也尝试了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!!
}

1 个答案:

答案 0 :(得分:2)

由于此函数仅返回true或false,因此您不应该使变量test为空。但是,如果您删除?= null,编译器会抱怨,因为它不能保证您的for循环中的代码会被调用(因为列表可能为空)。

为什么会给您错误的结果,这是因为您要更改列表中每个项目的test的值,所以最终值仅取决于列表中的最后一个元素。另外,如果列表为空,则test将保持为空,并且在使用test!!时会出现异常。

我不知道您是否要查看列表中的任何元素是否为“ a”,或者 all 元素是否为“ 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语句,并且具有相同的行为(尽管您发现,开始时这不是正确的行为)。