在Kotlin中,与这个表达式等价的是什么?
a ? b : c
这在Kotlin中是无效的代码。
在Kotlin中,与这个表达式等价的是什么?
a ? b : c
这在Kotlin中是无效的代码。
当前回答
您可以在Kotlin中以多种方式实现它
如果使用 如果(a) b else c 使用时 当(a) { True ->打印("value b") 错误->打印("value c") Else -> { 打印("在任何其他情况下默认返回") } } 空安全 Val a = b ?: c
其他回答
另一种简单的方法
val value : String = "Kotlin"
value ?: ""
这里kotlin本身检查空值,如果它为空,则传递空字符串值。
在Kotlin中没有三元运算符。乍一看,这似乎有问题。但是我们可以用内联if else语句因为这是表达式。我们要做的就是
var number = if(n>0) "Positive" else "Negetive"
这里我们可以用else if来阻塞我们需要的太多。像- - - - - -
var number = if(n>0) "Positive" else if(n<0) "Negative" else "Zero"
这一行比三元运算符简单易读。当我们在Java中使用多个三元运算符时,这看起来很可怕。但是这里我们有一个清晰的语法。甚至我们也可以把它写成多行。
如果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()
}
在Kotlin中,if语句是表达式。所以下面的代码是等价的:
if (a) b else c
表达式和语句之间的区别在这里很重要。在Java/ c# /JavaScript中,if形成语句,意味着它不解析为值。更具体地说,你不能把它赋值给一个变量。
// Valid Kotlin, but invalid Java/C#/JavaScript
var v = if (a) b else c
如果你来自一种If是语句的语言,这可能看起来不自然,但这种感觉很快就会消失。
在Kotlin中没有三元运算符,最封闭的是下面两种情况,
If else作为表达式语句
val a = true if(a) print(" a是真")else print(" a是假")
猫王运营商
如果?:左边的表达式不为空,则猫王操作符 返回它,否则返回右边的表达式。请注意 右边的表达式只在左边的表达式被求值 Side为空。
val name = node.getName() ?: throw IllegalArgumentException("name expected")
参考文档