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中的三元运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章