Kotlin中的三元运算符

Khe*_*raj 4 android kotlin

我可以用Java编写

int i = 10;
String s = i==10 ? "Ten" : "Empty";
Run Code Online (Sandbox Code Playgroud)

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

callSomeMethod(i==10 ? "Ten" : "Empty");
Run Code Online (Sandbox Code Playgroud)

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

Epi*_*rce 6

代替

String s = i==10 ? "Ten" : "Empty";
Run Code Online (Sandbox Code Playgroud)

从技术上讲你可以做

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
Run Code Online (Sandbox Code Playgroud)


Ily*_*a E 5

callSomeMethod( if (i==10) "Ten" else "Empty")
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上是FP语言中的标准语法,其中流控制构造是可以评估的表达式。如果您认为Kotlin追求提供“快捷方式”(用四个字符替换四个字符的快捷方式)的机会,那不是Kotlin的目标。 (3认同)