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

a ? b : c

这在Kotlin中是无效的代码。


当前回答

您可以在Kotlin中以多种方式实现它

如果使用 如果(a) b else c 使用时 当(a) { True ->打印("value b") 错误->打印("value c") Else -> { 打印("在任何其他情况下默认返回") } } 空安全 Val a = b ?: c

其他回答

如果condition为false则为" error ",否则为"someString"

在编写三元条件运算符之前,让我们考虑以下原型:

if (!answer.isSuccessful()) {
    result = "wrong"
} else {
    result = answer.body().string()
}

return result

解决方案

你可以用!(逻辑上不是)Kotlin if-expression中的运算符:

return if (!answer.isSuccessful()) "wrong" else answer.body().string()

如果你使用if-expression (expression without !操作符):

return if (answer.isSuccessful()) answer.body().string() else "wrong"

Kotlin 's Elvis operator ?:可以做得更好:

return answer.body()?.string() ?: "wrong"

同样,为相应的Answer类使用扩展函数:

fun Answer.bodyOrNull(): Body? = if (isSuccessful()) body() else null

在扩展函数中,由于Elvis操作符,您可以减少代码:

return answer.bodyOrNull()?.string() ?: "wrong"

或者直接用when条件表达式:

when (!answer.isSuccessful()) {
    parseInt(str) -> result = "wrong"
    else -> result = answer.body().string()
}

使用以下中缀函数,我可以覆盖许多常见的用例,几乎与在Python中实现的方式相同:

class TestKotlinTernaryConditionalOperator {

    @Test
    fun testAndOrInfixFunctions() {
        Assertions.assertThat(true and "yes" or "no").isEqualTo("yes")
        Assertions.assertThat(false and "yes" or "no").isEqualTo("no")

        Assertions.assertThat("A" and "yes" or "no").isEqualTo("yes")
        Assertions.assertThat("" and "yes" or "no").isEqualTo("no")

        Assertions.assertThat(1 and "yes" or "no").isEqualTo("yes")
        Assertions.assertThat(0 and "yes" or "no").isEqualTo("no")

        Assertions.assertThat(Date() and "yes" or "no").isEqualTo("yes")
        @Suppress("CAST_NEVER_SUCCEEDS")
        Assertions.assertThat(null as Date? and "yes" or "no").isEqualTo("no")
    }
}

infix fun <E> Boolean?.and(other: E?): E? = if (this == true) other else null
infix fun <E> CharSequence?.and(other: E?): E? = if (!(this ?: "").isEmpty()) other else null
infix fun <E> Number?.and(other: E?): E? = if (this?.toInt() ?: 0 != 0) other else null
infix fun <E> Any?.and(other: E?): E? = if (this != null) other else null
infix fun <E> E?.or(other: E?): E? = this ?: other

Java中等价的三元运算符

a ? b : c

是一个简单的IF在Kotlin一行

if(a) b else c

没有三元操作符(条件?然后:else),因为 普通的如果在这个角色中表现得很好。

https://kotlinlang.org/docs/reference/control-flow.html#if-expression


Null比较的特殊情况

你可以使用Elvis运算符

if ( a != null ) a else b
// equivalent to
a ?: b

另一种简单的方法

val value : String = "Kotlin"

value ?: ""

这里kotlin本身检查空值,如果它为空,则传递空字符串值。

Kotlin没有三元运算符。你可以使用正则if表达式,如下所示:

If (condition) exp1 else exp2

此外,在Kotlin中if不是语句而是表达式(即它计算为一个值),如果在if分支的主体中有多条语句(或else或else if的主体),块的最后一行就是该分支的值。例如:

if (a>b) {
    println("a is greater than b")
    a // value of this if
} else {
    println("b is greater than a")
    b // value of else
}