Dart语言是否内置类似Nullable Evaluation的可空参数函数处理特性?
Dart是否有内置的可空参数安全调用特性?
你实现的泛型函数逻辑是:当可空参数为null时返回null,否则用非空参数调用目标函数。Dart核心库并没有提供完全和这个函数一致的内置函数,但有更简洁的语法糖或扩展方式可以实现相同效果,不用重复封装函数。
替代方案1:直接使用三元表达式
这是最直接的写法,和你封装的函数逻辑完全一致,不需要额外定义:
import 'dart:convert'; void main() { String? test = null; print(test == null ? null : utf8.encode(test)); test = "Test"; print(test == null ? null : utf8.encode(test)); }
替代方案2:扩展方法(更优雅的复用方式)
如果需要频繁使用这种逻辑,可以定义一个扩展方法,调用起来更简洁:
extension NullableMapping<T> on T? { S? map<S>(S Function(T) transform) => this == null ? null : transform(this as T); } // 使用示例 import 'dart:convert'; void main() { String? test = null; print(test.map(utf8.encode)); test = "Test"; print(test.map(utf8.encode)); }
替代方案3:Dart 3.0+ 模式匹配(switch表达式)
如果你使用的是Dart 3.0及以上版本,可以用模式匹配的switch表达式来实现:
import 'dart:convert'; void main() { String? test = null; print(switch (test) { String s => utf8.encode(s), _ => null }); test = "Test"; print(switch (test) { String s => utf8.encode(s), _ => null }); }
内容的提问来源于stack exchange,提问作者jakobleck
相关产品推荐
相关产品推荐

