zhu*_*zhu 12 ternary-operator kotlin
解释:这个问题更多的是关于Kotlin的设计意图.许多表达式语言都支持Ternary operator和if expression[例如,Ruby,Groovy.]
首先,我知道Groovy支持Ternary operator和Elvis operator:Groovy中的三元运算符.所以我不认为这是一个语法问题.
然后官方文件说:
在Kotlin中,if是一个表达式,即它返回一个值.因此没有三元运算符(condition?then:else),因为普通的if在这个角色中工作正常.
这并不能说服我.因为Kotlin支持Elvis operator哪个普通如果在那个角色也可以正常工作.
我觉得ternary operator有时候比平常更好if,不过我想知道Kotlin为什么不支持ternary operator?
在ternary operator您这样使用的语言中
String value = condition ? foo : bar;
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,您可以使用if和else执行相同的操作
var value = if(condition) foo else bar;
Run Code Online (Sandbox Code Playgroud)
它比ternary operator。但是Kotlin的设计师认为可以。您可以这样使用,if-else因为在Kotlin中if是一个表达式并返回一个值
Elvis operator 本质上是三元条件语句的压缩版本,等效于Kotlin中的following。
var value = if(foo != null) foo else bar;
Run Code Online (Sandbox Code Playgroud)
但是如果Elvis operator使用它可以简化如下
var value = foo ?: bar;
Run Code Online (Sandbox Code Playgroud)
这是一个很大的简化,Kotlin决定保留它。
因为if .. else ..效果很好。看一看:
fun main(args: Array<String>) {
var i = 2
println("i ${ if(i == 1) "equals 1" else "not equals 1" }")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |