kotlin - Kotlin - 相同条件:多个 if 语句或一个 if 语句
问题描述
在 Kotlin 中,您可以使用类似于三元运算符的 if 语句。
我们可以选择这样做:
val x = if (isOdd) 1 else 2
但是如果我们有多个变量需要根据某些条件进行设置,那么用老式的方式来做这样的事情是否更正确:
val x: Int
val y: Int
val z: Int
if (isOdd) {
x = 1
y = 3
z = 5
} else {
x = 2
y = 4
z = 6
}
或像这样:
val x = if (isOdd) 1 else 2
val y = if (isOdd) 3 else 4
val z = if (isOdd) 5 else 6
第二种方法对我来说看起来更干净,但我想知道第一种方法是否会计算得更快,因为它只需要计算一次条件,而第二种方法需要检查条件 3 次。
第二种方式实际上更慢还是会被编译器优化?
解决方案
我更喜欢这样的东西,看起来更像 Kotlinesque:
data class Point3D(val x: Int, val y: Int, val z: Int)
fun foo(isOdd: Boolean): Point3D = if (isOdd) Point3D(1, 3, 5) else Point3D(2, 4, 6)
//or using destructureing see https://kotlinlang.org/docs/reference/multi-declarations.html)
val (x,y,z) = if (isOdd) Triple(1, 3, 5) else Triple(2, 4, 6)
它还结合了两者的优点,使用if
as 表达式,只if
需要一个。(以额外的对象分配为代价)。
但是要回答你的问题。做你喜欢和认为最易读的事情。性能方面我怀疑你会有所作为。
推荐阅读
- java - 静态 x 私有:价值可见性的成本
- java - 使实例变量保持其新值
- mysql - 如何在mysql中使用超过2个条件更新当前时间
- python - 将原始数据包转换为 pcap 格式并附加到 pcap 文件
- php - 尝试根据请求获取表单输出
- javascript - 如何使用样式标签内的 javascript 变量通过 document.write() 定位 div
- linux - 在 bash shell 中使用 scp 时出现分段错误(核心转储)
- html - MVC 打印分页符不起作用,内容被切断
- r - 具有二次项的 emmip (emmeans)
- java - Id 没有在 Spring Boot 中自动保存