在Kotlin中,与这个表达式等价的是什么?

a ? b : c

这在Kotlin中是无效的代码。


当前回答

其他答案中没有提到的一些极端情况。

自从Kotlin 1.1中出现takeIf后,三元运算符a ?B: c也可以这样表示:

b.takeIf { a } ?: c

在c为空的情况下,这将变得更短:

b.takeIf { a }

使b延迟求值的一般解决方法:

true.takeIf { a }?.let { b } ?: c

还要注意,在Java世界中,典型的空检查像value != null ?在Kotlin中转换为value ?: defaultValue。

类似a != null ?B: c可以翻译成a?让{b} ?: c。


看也是布尔?。如果真的建议在KT-6938应该允许简化一个?b: null表达式到a.f iftrue {b}而不提前计算b。

其他回答

在Java中,if是语句,但在Kotlin中if是表达式。它被称为表达式,因为它比较a和b的值并返回最大值。因此,在Kotlin中没有三元运算符(a>b)?A:b,因为它被if表达式所取代。

你可以这样做:

val ans = (exp1 == exp2) then "yes" ?: "no"

通过使用这个扩展:

infix fun<T> Boolean.then(first: T): T? = if (this) first else null

附注:先不要修改上面的中缀函数接受:T?,表达式就会变得逻辑错误。例:如果你先修改它接受空值:T?,那么val ans = (true == true)那么null ?: "abcd", ans将是"abcd",这将是不正确的。

记住,与许多流行语言不同,三元运算符和猫王运算符在Kotlin中具有不同的含义。表情干什么?在Kotlin编译器中value1: value2会给你不好的单词,不像任何其他语言,因为在Kotlin中没有三元运算符,就像官方文档中提到的那样。原因是if、when和try-catch语句本身返回值。

那么,做表情?Value1: value2可以替换为

Val Max = if (a > b) print(选择一个) 其他的 打印(“选择b”)

Kotlin拥有的Elvis运算符只适用于可空变量的情况,例如:

如果我执行类似value3 = value1 ?: value2这样的操作,那么如果value1为null,那么将返回value2,否则将返回value1。

从这些回答中可以得到更清晰的理解。

when替换c类语言的切换操作符。最简单的形式是这样的

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
        print("x is neither 1 nor 2")
    }
}

另一个有趣的方法是在以下情况使用:

when(a) {
  true -> b
  false -> c
}

在一些更复杂的场景中非常方便。老实说,这对我来说比……其他的……