Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化when表达式Kotlin中的重复代码_Kotlin_Optimization_Expression - Fatal编程技术网

优化when表达式Kotlin中的重复代码

优化when表达式Kotlin中的重复代码,kotlin,optimization,expression,Kotlin,Optimization,Expression,我的一个方法根据列表的元素返回一个布尔值,列表的大小可以从0到4。我使用了when表达式,但问题是代码的重复冗余。这是: list.apply { return when (size) { //size in 0..4 0 -> false 1 -> get(0) == 9 2 -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8 3 ->

我的一个方法根据列表的元素返回一个布尔值,列表的大小可以从0到4。我使用了when表达式,但问题是代码的重复冗余。这是:

list.apply {
    return when (size) { //size in 0..4
        0 -> false
        1 -> get(0) == 9
        2 -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8
        3 -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8 || get(0) == get(2) || get(0) + get(2) == 8
        else -> get(0) == 9 || get(0) == get(1) || get(0) + get(1) == 8 || get(0) == get(2) || get(0) + get(2) == 8 || get(0) == get(3) || get(0) + get(3) == 8 // when size == 4
    }
}
如您所见,下面的代码有许多重复。我找到了另一个解决方案,这个几乎不会重复,但我的印象是,缩短代码是可能的,也许我错了?。以下是内联函数apply中的另一个版本:

有没有办法把代码缩短或优化一点?在这两个版本中,哪一个是首选的?为什么?

val result=withlist{ isNotEmpty&&first==9 | | 1..lastIndex.any{first==getit | | first+getit==8} } val结果=withlist{ isNotEmpty&&first==9 | | 1..lastIndex.any{first==getit | | first+getit==8} }
您的第二段代码似乎不会影响您的returnValue。它将始终为false,这是故意的吗?抱歉,我刚刚忘记正确重命名变量。。。更新^^您的第二段代码似乎不会影响您的returnValue。它将始终为false,这是故意的吗?抱歉,我刚刚忘记正确重命名变量。。。更新^^当列表中有4个元素时,ArrayIndexOutOfBoundsException如何?谢谢,修复了它感谢帮助!我根本不知道内联any函数,我只使用apply和let…当列表中有4个元素时,ArrayIndexOutOfBoundsException如何?谢谢,修复了它谢谢帮助!我根本不知道内联的any函数,我只使用apply和let。。。。
var rtn = false
if (size > 0) rtn = rtn || get(0) == 9
if (size > 1) rtn = rtn || get(0) == get(1) || get(0) + get(1) == 8
if (size > 2) rtn = rtn || get(0) == get(2) || get(0) + get(2) == 8
if (size > 3) rtn = rtn || get(0) == get(3) || get(0) + get(3) == 8
return rtn