解释:这个问题更多的是关于Kotlin的设计意图。许多表达式语言都支持Ternary operator
和if expression
[例如, Ruby,Groovy 。]
首先,我知道Groovy同时支持Ternary operator
和Elvis operator
:Ternary operator in Groovy。所以我不认为这是一个语法问题。
然后官方文件说:
在Kotlin中,if是一个表达式,即它返回一个值。因此,没有三元运算符(condition?then:else),因为普通的if在这个角色中工作正常。
这并不能说服我。因为Kotlin支持Elvis operator
普通,如果在该角色中工作得很好。
我认为ternary operator
有时比普通if
更好,但我想知道为什么Kotlin不支持ternary operator
?
答案 0 :(得分:5)
在ternary operator
语言中,您可以像这样使用
String value = condition ? foo : bar;
在Kotlin中,您可以使用if和else
执行相同的操作var value = if(condition) foo else bar;
比ternary operator
简洁。但是Kotlin的设计师认为它没问题。您可以像这样使用if-else
因为在Kotlin中if
是一个表达式并返回一个值
Elvis operator
本质上是三元条件语句的压缩版本,相当于Kotlin中的跟随。
var value = if(foo != null) foo else bar;
但如果使用Elvis operator
,则简化如下
var value = foo ?: bar;
这是相当简化的,Kotlin决定保留它。
答案 1 :(得分:4)
因为if .. else ..
工作正常。看看:
fun main(args: Array<String>) {
var i = 2
println("i ${ if(i == 1) "equals 1" else "not equals 1" }")
}
答案 2 :(得分:1)
三元运算符存在问题,例如很难用大表达式来阅读。这是我的C ++项目中的一行,我使用了三元运算符:
const long offset = (comm_rank > 0) ? task_size_mod + (comm_rank - 1) * task_size : 0;
我宁愿在这里使用if else
表达式,因为它更加明显。
回答你的问题,我知道在Kotlin中没有实现ternary operator
的两个原因:
1)由于if else
无论如何都是表达式,因此它可以替换? :
2)其他语言(C ++)的经验表明,? :
会激发难以阅读的代码,因此最好不要使用
答案 3 :(得分:1)
程序员有时必须决定执行一段代码,这就是控制流。 If 语句是控制 Kotlin 中流量的最基本方法。请注意,在 Kotlin 中,如果是表达式,而不是声明,因为它是 Java 。
表达式:表达式返回一个值。因此,Kolin的结果 如果可以将表达式分配给变量。
因此,三元表达式将是多余的,并且在Kotlin中不存在。在Java中,我们会写(这是您问题的答案)
Java三元运算符
int最低=(a
在科特林中,我们可以使用if表达式编写类似的内容。
val minimum = if(a
注意: 如果将If用作表达式,则它必须包含else子句。该表达式在所有情况下都必须具有一个值。
答案 4 :(得分:0)
因为 if-else 是Kotlin中的一个表达式:
String check = number % 2 == 0 ? "even" : "odd" // Java
if (number % 2 == 0) "even else "odd" // Kotlin
这就是为什么Kotlin中没有三元运算符,而且您也可以使用when
表达式,如果您想提供很多可能的执行路径,则非常方便