Dart是否支持逗号运算符?求替代逗号运算符的更优实现方案
Dart 中的逗号运算符替代方案
首先明确回答:Dart 并不支持 JavaScript/C++ 里那种能串联表达式并返回最后一个值的逗号运算符,这就是你那段代码编译失败的原因。
不过看你的代码逻辑,其实你可能绕了个弯路——ArgumentError.checkNotNull(value)本身就会返回经过非空校验的value啊!所以最简洁的解决方案根本不需要额外的函数,直接这么写就行:
final foo = ArgumentError.checkNotNull(value) * 2;
这样既完成了非空检查,又直接拿到了要参与计算的value,完全达到了你想要的效果。
如果之后你遇到更通用的场景:需要先执行几个表达式,最后返回其中某个值(模拟逗号运算符的逻辑),除了你目前的last函数,还有几个更优雅的方案:
立即执行匿名函数:这是最直接的模拟方式,可读性也不错:
final foo = (() { ArgumentError.checkNotNull(value); // 这里可以添加其他需要执行的操作 return value; })() * 2;如果是简单的单行操作,也可以写成紧凑的箭头函数版本:
final foo = (() { ArgumentError.checkNotNull(value); return value; })() * 2;封装语义化的工具函数:如果这种需求出现得比较频繁,可以封装一个比
last语义更清晰的函数,比如类似很多语言里的tap函数:T tap<T>(T value, void Function(T) action) { action(value); return value; }用起来是这样的:
final foo = tap(value, (v) => ArgumentError.checkNotNull(v)) * 2;这个函数的意思是“对传入的值执行一个操作,然后原封不动返回它”,比
last的命名更能体现代码意图。
内容的提问来源于stack exchange,提问作者user3612643
相关产品推荐
相关产品推荐

