空值结合运算符

空值结合运算符（在Perl中称逻辑定义或运算符）是一种二元运算符，是多种编程语言的基本条件表达式语法的一部分，包括C#、PowerShell 7.0.0、Perl 5.10，Swift，PHP 7.0.0。虽然其行为因实现而异，但空值合并运算符首先考虑返回其左操作数的值（如果左操作数存在且不为空） ，其次考虑返回右操作数的值。此行为可为特定值不可用的情况定义缺省值。
与三元条件表达式 codice_1中表达式x可能求值2次相比，空值结合运算符更类似二元埃尔维斯运算符codice_2，操作数求值至多一次，这在x的求值有副作用情况下特别有意义。
编程语言用法.
Bash.
Bash中，“如果参数未设置或为空，则用缺省值替代”：
<syntaxhighlight lang="bash">
echo "$title" # prints: Default title
</syntaxhighlight>
C#.
C#中，空值结合运算符是codice_3.常用于简化表达式：
<syntaxhighlight lang="csharp">
possiblyNullValue ?? valueIfNull
</syntaxhighlight>
例如，如果希望C#源码给一个页缺省页标题：
<syntaxhighlight lang="csharp">string pageTitle = suppliedTitle ?? "Default Title";</syntaxhighlight>
以代替更啰嗦的实现：
<syntaxhighlight lang="csharp">
string pageTitle = (suppliedTitle != null) ? suppliedTitle : "Default Title";
</syntaxhighlight>
或者
<syntaxhighlight lang="csharp">
string pageTitle;
if (suppliedTitle != null)
else
</syntaxhighlight>
上述3种实现给codice_4相同的结果。
注意表达式codice_5在codice_3运算符下求值1次，而在另外2种代码例子种可能求值2次。
该运算符在同一个表达式可以使用多次：
<syntaxhighlight lang="csharp">
return some_Value ?? some_Value2 ?? some_Value3; 
</syntaxhighlight> 
从C# 8.0起，支持codice_7空值结合赋值运算符：
<syntaxhighlight lang="csharp">
some_Value ??= some_Value2; 
</syntaxhighlight>
以代替啰嗦的写法：
<syntaxhighlight lang="csharp">
some_Value = some_Value ?? some_Value2; 
</syntaxhighlight>
结合使用codice_8或空值条件成员访问运算符codice_9，空值结合运算符可在对象为空或对象的成员为空时提供缺省值。例如，下述例子中codice_10对象为空或者codice_10不为空但其属性codice_12为空，则提供缺省值：
<syntaxhighlight lang="csharp">
string pageTitle = page?.Title ?? "Default Title"; 
</syntaxhighlight> 
JavaScript.
JavaScript最接近的运算符是codice_3, 即"nullish coalescing operator"，从ECMAScript第11版引入。当左端操作数不为"nullish" (codice_14或codice_15)，取其值作为结果，否则取右端操作数作为结果。 例如：
<syntaxhighlight lang="javascript">
const a = b ?? 3;
</syntaxhighlight>
逻辑或运算符(codice_16)对任何布尔假值：codice_14, codice_15, codice_19, codice_20, codice_21, codice_22，都会取右端操作数的值。
Python.
Python没有空值结合运算符。可用条件表达式模拟其功能：
<syntaxhighlight lang="python">now() if time is None else time</syntaxhighlight>
Python的运算符提供了类似但不同的行为。区别在于，如果左操作数的结果为，也会返回右操作数的值：
<syntaxhighlight lang="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"
</syntaxhighlight>
而真正的空值结合运算符仅在最后一种情况下返回结果，而在左操作数为(, , )时返回响应值。 
PowerShell.
PowerShell 7 提供了codice_3空值结合运算符：
<syntaxhighlight lang="powershell">
$myVar = $null
$x = $myVar ?? "something" # assigns "something"
</syntaxhighlight>
SQL.
Oracle的PL/SQL, NVL()函数提供了这种输出：
<syntaxhighlight lang="sql">
NVL(possibly_null_value, 'value if null');
</syntaxhighlight>
SQL Server/Transact-SQL有ISNULL函数，其原型为：
<syntaxhighlight lang="tsql">
ISNULL(possibly_null_value, 'value if null');
</syntaxhighlight>
注意"ISNULL"与"IS NULL"不同，后者判断表达式是否为空。
ANSI SQL-92标准包括了一个COALESCE函数，在Oracle, SQL Server, PostgreSQL, SQLite and MySQL.都被实现了。COALESCE函数返回第一个不为空的参数的结果，如果所有参数都为空，则返回空。
<syntaxhighlight lang="postgresql">
COALESCE(possibly_null_value[, possibly_null_value, ...]);
</syntaxhighlight>
VB.NET.
VB.NET中的codice_24运算符/关键字得到空值结合运算符的效果。 
<syntaxhighlight lang="vbnet">
Dim pageTitle = If(suppliedTitle, "Default Title")
</syntaxhighlight>
这比下述写法更精炼：
<syntaxhighlight lang="vbnet">
Dim pageTitle = If(suppliedTitle <> Nothing, suppliedTitle, "Default Title")
</syntaxhighlight>