推荐答案
在 Dart 中,?.
运算符被称为“条件成员访问运算符”或“安全调用运算符”。它的作用是在访问对象的成员(如属性或方法)时,如果对象为 null
,则不会抛出异常,而是直接返回 null
。
本题详细解读
1. 基本用法
?.
运算符通常用于避免在访问可能为 null
的对象的成员时抛出异常。例如:
class User { String? name; } void main() { User? user; print(user?.name); // 输出: null }
在这个例子中,user
对象为 null
,但使用 ?.
运算符访问 name
属性时,不会抛出异常,而是直接返回 null
。
2. 与普通成员访问的区别
如果不使用 ?.
运算符,而是直接使用 .
运算符访问 null
对象的成员,则会抛出 NoSuchMethodError
异常:
void main() { User? user; print(user.name); // 抛出异常: NoSuchMethodError }
3. 链式调用
?.
运算符可以用于链式调用,确保在链中的任何一个对象为 null
时,整个表达式返回 null
,而不会抛出异常:
void main() { User? user; print(user?.name?.toUpperCase()); // 输出: null }
在这个例子中,即使 user
或 name
为 null
,也不会抛出异常,而是直接返回 null
。
4. 与 ??
运算符的结合使用
?.
运算符经常与 ??
运算符结合使用,以提供默认值:
void main() { User? user; print(user?.name ?? 'Unknown'); // 输出: Unknown }
在这个例子中,如果 user
或 name
为 null
,则返回 'Unknown'
作为默认值。
5. 总结
?.
运算符是 Dart 中处理 null
安全性的重要工具,它允许你在访问可能为 null
的对象的成员时,避免抛出异常,并优雅地处理 null
情况。