我正在尝试使用 WHEN
带有 >
的子句或 <
比较。
这不会编译。有没有办法在比较中使用一组普通的 bool 运算符(<<=、>=>)来启用它?
val foo = 2
// doesn't compile
when (foo) {
> 0 -> doSomethingWhenPositive()
0 -> doSomethingWhenZero()
< 0 -> doSomethingWhenNegative()
}
我试图找到一个无限范围的比较,但也无法做到这一点?可以写成无限范围吗?
// trying to get an unbounded range - doesn't compile
when (foo) {
in 1.. -> doSomethingWhenPositive()
else -> doSomethingElse()
}
您可以将整个表达式放在第二部分,这可以,但似乎是不必要的重复。至少它可以编译和工作。
when {
foo > 0 -> doSomethingWhenPositive()
foo < 0 -> doSomethingWhenNegative()
else -> doSomethingWhenZero()
}
但我不确定这是否比我们多年来一直使用的 if-else 替代方案更简单。比如:
if ( foo > 0 ) {
doSomethingWhenPositive()
}
else if (foo < 0) {
doSomethingWhenNegative()
}
else {
doSomethingWhenZero()
}
当然,现实世界的问题比上面的要复杂,WHEN
子句很有吸引力,但在这种类型的比较中并没有像我预期的那样起作用。
最佳答案
即使像 Kotlin 这样灵活的语言也没有针对每种情况的“优雅”/DRY 解决方案。
你可以这样写:
when (foo) {
in 0 .. Int.MAX_VALUE -> doSomethingWhenPositive()
0 -> doSomethingWhenZero()
else -> doSomethingWhenNegative()
}
但是你依赖于变量类型。
我认为以下形式是 Kotlin 中最惯用的:
when {
foo > 0 -> doSomethingWhenPositive()
foo == 0 -> doSomethingWhenZero()
else -> doSomethingWhenNegative()
}
是的...有一些(最少的)代码重复。
一些语言(Ruby?!)试图为任何情况提供一种 super 优雅的形式 - 但有一个权衡:语言变得更复杂,程序员更难端到端地了解。
我的 2 美分...
关于kotlin - 使用 Kotlin WHEN 子句进行 <、<=、>=、> 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377386/