kotlin中的三元运算符[重复]

Posted

技术标签:

【中文标题】kotlin中的三元运算符[重复]【英文标题】:Ternary operator in kotlin [duplicate] 【发布时间】:2019-01-17 15:30:11 【问题描述】:

我可以用java写

int i = 10;
String s = i==10 ? "Ten" : "Empty";

即使我可以在方法参数中传递它。

callSomeMethod(i==10 ? "Ten" : "Empty");

如何将其转换为 kotlin? 在 kotlin 中编写相同内容时,Lint 显示错误。

【问题讨论】:

【参考方案1】:
callSomeMethod( if (i==10) "Ten" else "Empty")

关于三元运算符的讨论: https://discuss.kotlinlang.org/t/ternary-operator/2116/3

【讨论】:

Kotlin 提供了比 Java 更多的快捷方式,但现在不行了。 这实际上是 FP 语言中的标准语法,其中流控制结构是可以计算的表达式。如果您认为 Kotlin 寻求机会提供将四个字符替换为一个字符的“快捷方式”,那么不,这绝不是 Kotlin 的目标。【参考方案2】:

您可以为布尔值创建一个具有泛型的扩展函数

 fun <T> Boolean.elvis( a :T, b :T ): T
     if(this) // this here refers to the boolean result
         return a
     else
         return b

现在您可以将它用于任何布尔值(酷 Kotlin)

//                                         output
System.out.print((9>6).elvis("foo","bar")) foo
System.out.print((5>6).elvis("foo","bar")) bar

Extensions in kotlin

【讨论】:

这是一个很好的答案。但我会使用if else 方式。因为char counts 几乎相同,我不会添加扩展来执行相同的字符计数代码。 @Khemraj 感谢和感谢你,我有机会玩一点,我完全尊重并同意你的决定,快乐编码:) 顺便说一下,感谢分享扩展信息。我是 kotlin 的新手,很欣赏你的方式。【参考方案3】:

由于最初的问题是使用术语“猫王运算符”,因此提供与三元运算符的简短比较可能是个好主意。

三元运算符和猫王运算符的主要区别在于,三元运算符用于短 if/else 替换,而猫王运算符用于空安全,例如:

port = (config.port != null) ? config.port : 80; - if/then/else 语句的快捷方式 port = config.port ?: 80 - 提供一个默认值,以防原始值是 null

这些示例看起来非常相似,但三元运算符可用于任何类型的布尔检查,而猫王运算符是 use config.port if it's not null else use 80 的简写,因此它只检查 null

现在,我认为 Kotlin 没有三元运算符,您应该使用像这样的 if 语句 - s = if (i==10) "Ten" else "Empty"

【讨论】:

【参考方案4】:

代替

String s = i==10 ? "Ten" : "Empty";

技术上你可以做到

val s = if(i == 10) "Ten" else "Empty"

val s = when 
    i == 10 -> "Ten"
    else -> "Empty"


val s = i.takeIf  it == 10 ?.let  "Ten"  ?: "Empty"

// not really recommended, just writing code at this point
val s = choose("Ten", "Empty")  i == 10  
inline fun <T> choose(valueIfTrue: T, valueIfFalse: T, predicate: () -> Boolean) = 
    if(predicate()) valueIfTrue else valueIfFalse

【讨论】:

以上是关于kotlin中的三元运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin三元运算符[重复]

Kotlin 等效于三元运算符 [重复]

为啥 Kotlin 不支持“三元运算符”[关闭]

三元?运算符与 C# 中的传统 If-else 运算符 [重复]

带与号的三元运算符[重复]

Java三元运算符语法[重复]