Elvis 运算符 (?:)

2024 年 8 月 29 日 | 阅读 3 分钟

Elvis 运算符 (?:) 用于在条件表达式为 null 时返回非空值。它也用于检查值的空安全性。

在某些情况下,我们可以声明一个可以保存 null 引用的变量。假设变量 str 包含 null 引用,在使用程序中的 str 之前,我们将检查其是否为 null。如果变量 str 被发现不为 null,则使用它的属性,否则使用其他非空值。

在上面的代码中,String str 包含一个 null 值,在访问 str 的值之前,我们需要执行安全性检查,即字符串是否包含值。在传统方法中,我们使用 if ... else 语句执行此安全检查。

输出

Length of str is -1
Length of str2 is 30

Kotlin 提供高级运算符,称为 Elvis 运算符(?:),即使条件表达式为 null,它也会返回非空值。上面的 if . . . else 运算符可以使用 Elvis 运算符表达如下

Elvis 运算符返回表达式左侧的值,即 -1。(str?. length),如果它不为 null,否则返回表达式右侧的值,即 -1。Elvis 运算符右侧的表达式仅在左侧返回 null 时才会被计算。

Kotlin Elvis 运算符示例

输出

Length of str is -1
Length of str2 is 30

由于 Kotlin 抛出并返回一个表达式,因此它们也可以在 Elvis 运算符的右侧使用。这可以用于检查函数参数

Kotlin Elvis 运算符使用 throw 和 return 表达式

输出

str = abc
strLength = 3
strLength2 = 3

check(null,"mango") = null
check("apple","orange") = 
textOne = apple
textTwo = orange