为什么Kotlin不支持“三元运算符”

时间:2016-03-10 07:58:37

标签: ternary-operator kotlin

解释:这个问题更多的是关于Kotlin的设计意图。许多表达式语言都支持Ternary operatorif expression [例如, Ruby,Groovy 。]

首先,我知道Groovy同时支持Ternary operatorElvis operatorTernary operator in Groovy。所以我不认为这是一个语法问题。

然后官方文件说:

  

在Kotlin中,if是一个表达式,即它返回一个值。因此,没有三元运算符(condition?then:else),因为普通的if在这个角色中工作正常。

这并不能说服我。因为Kotlin支持Elvis operator普通,如果在该角色中工作得很好。

我认为ternary operator有时比普通if更好,但我想知道为什么Kotlin不支持ternary operator

5 个答案:

答案 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

  1. 声明:语句是已执行的行,不返回 值。结果,语句不能位于等号的右边 标志。
  2. 表达式:表达式返回一个值。因此,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表达式,如果您想提供很多可能的执行路径,则非常方便