我是Kotlin的新手,但我非常喜欢它.当你可以将三行代码合二为一时,会有一种美妙的感觉.现在我经常发现自己正在查看我的代码并思考"这里有一些冗余.应该有一种更简洁的方法来实现它." 当我做一些搜索时,Kotlin经常提供更简洁的方式.
这是一个问题,我感觉应该有一个简单,简洁的Kotlin解决方案,但我不知道它.希望你能开导我!
像这个人为的例子一样代码:
fun doSomething(): Boolean {
if (randomInt % 2 == 0) {
foo = Foo()
true
} else {
bar = null
false
}
}
Run Code Online (Sandbox Code Playgroud)
根据if条件,我想运行一些代码,然后返回条件的值.令我烦恼的是,我必须明确说"如果条件成立,则返回true.如果是假,则返回false." 这似乎是多余的.当然,我可以说return randomInt % 2,但我想根据它是否真实运行代码.
是否有一个我不知道的魔术师Kotlin?我是否应该为我处理这种情况,尽管调用的语法与if语句不同?是否有某种映射功能,或某种方式重载如果?似乎应该有一个简洁,聪明的答案,但它不会来找我.
您可以稍微重构一下代码,以便返回和代码发生在不同的地方:
fun doSomething(): Boolean {
val isEven = randomInt % 2 == 0
if (isEven) foo = Foo() else bar = null
return isEven
}
Run Code Online (Sandbox Code Playgroud)
我赞成一些答案。我应该考虑将条件拆分为变量或在条件之后进行真/假测试。
但是在睡了之后,我有另一个解决方案。
新的实用功能:
fun Boolean.onTrue(block: () -> Unit): Boolean {
if (this) block()
return this
}
fun Boolean.onFalse(block: () -> Unit): Boolean {
if (!this) block()
return this
}
Run Code Online (Sandbox Code Playgroud)
然后我的原始代码示例可以浓缩为:
fun doSomething() = (randomInt % 2).onTrue { foo() }.onFalse { bar = null }
Run Code Online (Sandbox Code Playgroud)
这是最简洁的选项,尽管它有其自身的缺点。没有什么可以阻止用户调用onTrue()两次或onFalse()之前调用onTrue()。它看起来与标准完全不同的if / else,如果你使用这两个路径,都onTrue()和onFalse()要检查的条件。然后,当然,记得使用新的实用程序函数而不是标准的 Kotlin 运算符。尽管如此,它仍然具有吸引人的简洁性。我有兴趣看看其他人的想法。
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |