空值结合运算符空值结合运算符(在Perl中称逻辑定义或运算符)是一种二元运算符,是多种编程语言的基本条件表达式语法的一部分,包括C#[1]、PowerShell 7.0.0、Perl 5.10,Swift,PHP 7.0.0。虽然其行为因实现而异,但空值合并运算符首先考虑返回其左操作数的值(如果左操作数存在且不为空) ,其次考虑返回右操作数的值。此行为可为特定值不可用的情况定义缺省值。 与三元条件表达式 编程语言用法BashBash中,“如果参数未设置或为空,则用缺省值替代”:[2] #supplied_title='supplied title' # Uncomment this line to use the supplied title
title=${supplied_title:-'Default title'}
echo "$title" # prints: Default title
C#C#中,空值结合运算符是 possiblyNullValue ?? valueIfNull
例如,如果希望C#源码给一个页缺省页标题: string pageTitle = suppliedTitle ?? "Default Title";
以代替更啰嗦的实现: string pageTitle = (suppliedTitle != null) ? suppliedTitle : "Default Title";
或者 string pageTitle;
if (suppliedTitle != null)
{
pageTitle = suppliedTitle;
}
else
{
pageTitle = "Default Title";
}
上述3种实现给 注意表达式 该运算符在同一个表达式可以使用多次: return some_Value ?? some_Value2 ?? some_Value3;
从C# 8.0起,支持 some_Value ??= some_Value2;
以代替啰嗦的写法: some_Value = some_Value ?? some_Value2;
结合使用空值条件运算符 string pageTitle = page?.Title ?? "Default Title";
JavaScriptJavaScript最接近的运算符是 const a = b ?? 3;
逻辑或运算符( PythonPython没有空值结合运算符。可用条件表达式模拟其功能: now() if time is None else time
Python的 42 or "something" # returns 42
0 or "something" # returns "something"
False or "something" # returns "something"
"" or "something" # returns "something"
None or "something" # returns "something"
而真正的空值结合运算符仅在最后一种情况下返回结果 PowerShellPowerShell 7 提供了 $myVar = $null
$x = $myVar ?? "something" # assigns "something"
SQLOracle的PL/SQL, NVL()函数提供了这种输出: NVL(possibly_null_value, 'value if null');
SQL Server/Transact-SQL有ISNULL函数,其原型为: ISNULL(possibly_null_value, 'value if null');
注意ISNULL与IS NULL不同,后者判断表达式是否为空。 ANSI SQL-92标准包括了一个COALESCE函数,在Oracle,[5] SQL Server,[6] PostgreSQL,[7] SQLite[8] and MySQL.[9]都被实现了。COALESCE函数返回第一个不为空的参数的结果,如果所有参数都为空,则返回空。 COALESCE(possibly_null_value[, possibly_null_value, ...]);
VB.NETVB.NET中的 Dim pageTitle = If(suppliedTitle, "Default Title")
这比下述写法更精炼: Dim pageTitle = If(suppliedTitle <> Nothing, suppliedTitle, "Default Title")
参考文献
|