优化when表达式Kotlin中的重复代码
我的一个方法根据列表的元素返回一个布尔值,列表的大小可以从0到4。我使用了when表达式,但问题是代码的重复冗余。这是:优化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 ->
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