Dart中如何简写NaN判断代码?有没有类似JS||运算符的替代方案?
Dart 处理NaN fallback的简洁写法
Dart 本身的||仅支持布尔运算,无法像JS一样直接对数值做NaN fallback,但是可以通过以下几种方式实现更简洁的写法,同时还能避免你原有代码两次执行除法的冗余问题:
- 方法1:临时变量存储计算结果(无额外依赖,最通用)
final ratio = data['amount'] / totalSpending; final res = ratio.isNaN ? 0.0 : ratio;
- 方法2:封装扩展方法(一次封装,全项目复用,写法最接近JS)
先定义通用的数值NaN处理扩展:
extension NumNaNUtil on num { /// 当数值为NaN时返回0.0,否则返回自身 num get nanToZero => isNaN ? 0.0 : this; }
使用时直接一行调用即可:
(data['amount'] / totalSpending).nanToZero
- 方法3:借助通用
let扩展实现单行无重复计算
如果你的项目已经有通用的Object扩展方法,也可以直接用let实现单行处理:
extension ObjectExt<T> on T { R let<R>(R Function(T it) op) => op(this); } // 业务代码调用 (data['amount'] / totalSpending).let((val) => val.isNaN ? 0.0 : val);
注意:Dart 中
NaN属于合法的num类型值,不是null,因此无法用??运算符直接做fallback处理。
内容的提问来源于stack exchange,提问作者マスターヨーダー
相关产品推荐
相关产品推荐

