安全导航运算符

在面向对象程序设计中，安全导航运算符(safe navigation operator，也可称作optional chaining operator、safe call operator、null-conditional operator)是一个二元运算符，在第一个实参为空值时返回空值，否则按照第二个实参执行解引用(dereference)操作(典型如对象成员访问，数组索引，lambda调用)。

在编程语言中，导航运算符(navigation operator，例如 ".") 如果应用到空对象将会导致一个错误。安全导航运算符在这种情况下会中止对方法或者字段的链式求值并返回空值。这避免了顺序地显式空值检查。主要优点是避免了诅咒金字塔现象。不必写多层嵌套if语句，编程者可以写正常的链式表达式。 

安全导航运算符与空值结合运算符二者都是空值感知运算符(null-aware operator)。

各语言例子

C#
C# 6.0及更新版本支持?., 叫做空值条件成员访问运算符（null-conditional member access operator），类似地还有??（空值结合运算符)与?[]（空值条件元素访问运算符）。如果成员访问的结果是值类型，则应该是该类型的可空的版本。

例如：
var name = articles?[0]?.Author?.Name;

调用lambda需要callback?.Invoke()，例如：
var result = callback?.Invoke(args);

 JavaScript 
从ECMAScript 2020开始支持可选链式运算符。
const name = article?.authors?.[0]?.name
const result = callback?.()

 PHP 
安全導航運算子自PHP 8起開始支援：

$name = $article?->author?->name;

 Python 
尚不支持空值感知运算符。

TypeScript
Typescript 3.7开始支持可选链式运算符，例如：

let x = foo?.bar?.[0]?.baz();

Visual Basic .NET
Visual Basic 14开始支持?.与?() (空值下标访问)，类似于C#.

例如：
Dim name = articles?(0)?.Author?.Name

参见
空值结合运算符

参考文献

外部链接
 PEP 505 , discussing the possibility of safe navigation operators for Python

Category:运算符_(编程)
Category:條件結構
Category:二元運算
Category:带有代码示例的条目