如何判断参数是否为空并安全调用函数?有无更简洁优雅的写法?
空安全下参数判空与函数调用的优雅写法
核心需求实现
你要的是空安全场景里,参数非空时才调用函数,为空则返回null的简洁写法,完全可以替代冗余的三元表达式。
简化方案
你的方向是对的,用Dart的空安全操作符就能大幅简化代码:
基础场景:成员方法调用
就像你举的例子:
int? y = null; // 不需要加 ?? null,y?.toDouble() 本身在y为空时就返回null double? x = y?.toDouble();
这里的?.是条件成员访问符——如果y非空,就执行toDouble();如果y是null,直接返回null,全程不需要!断言,完全符合空安全要求。
普通函数调用场景
针对你原来的写法:
var? x = null == y ? null : foo(y!);
可以简化成两种方式:
- 基础判空写法:
var? x = y != null ? foo(y) : null;
- 更紧凑的
let函数写法(Dart 3+ 或引入collection包):
var? x = y?.let(foo);
let会自动把非空的y传递给foo,空值时直接返回null,代码更简洁。
常见场景示例
- 带额外处理的函数调用:
String? input = " test "; int? trimmedLength = input?.let((s) => s.trim().length);
- 链式多操作:
String? nickname = " bob "; String? formattedNick = nickname?.trim().toUpperCase();
内容的提问来源于stack exchange,提问作者user6097845
相关产品推荐
相关产品推荐

