我有以下形式的分配&NULL判断,以避免在我的 map 中进行双重查找.
在DART中,有没有更好或更惯用的方法来实现这一点?

bool isConnected(a, b){
  List list;
  return (
    ((list = outgoing[a]) != null && list.contains(b)) ||
    ((list = incoming[a]) != null && list.contains(b))
  );
}

推荐答案

从DART 1.12开始,支持NULL的操作符可用于此类型的情况:

bool isConnected(a, b) {
  bool outConn = outgoing[a]?.contains(b) ?? false;
  bool inConn = incoming[a]?.contains(b) ?? false;
  return outConn || inConn;
}

如果左侧为NULL,则?.运算符会短路为NULL,如果左侧不为NULL,则??运算符会返回左侧,否则返回右侧.

该声明

outgoing[a]?.contains(b)

因此,如果outgoing[a]null,则求值为null,否则将求值为布尔结果contains(b).

这意味着生成的语句将是以下语句之一:

bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true

同样的道理也适用于inConn布尔值,这意味着保证inConnoutConn都是非空的,从而允许我们返回对这两个布尔值进行||运算的结果.

Dart相关问答推荐

什么时候在 Dart 中使用interfaces接口?

Flutter:如何同步使用 SharedPreferences?

如何在Flatter中将图表线 colored颜色 更改为自定义 colored颜色 代码值

为http POST请求从Flutter上的TextFormField捕获数据

在 Flutter 中保持响应的同时制作持久的背景图像

更改底片的灰色覆盖背景

Flutter类继承

在Flatter中导航后,无法关注新页面中的文本字段

在 Flutter 中推送新页面时,Navigator 堆栈上的页面会重建

如何导入文件夹中的所有文件?

Dart 中的构造函数和初始化列表有什么区别?

如何将 3 字节的 unicode 字符写为字符串文字

如何在 Dart 中将 UTF-8 字符串转换为字节数组?

从dart语言列表中过滤空值的最佳方法是什么

dart中 library关键字的确切含义

如何在 Dart 中扁平化map列表?

在 Dart 中创建具有可变数量的参数或参数的函数

你如何在 Dart 中打印美元符号 $

Dart 中的 urlencoding

Dart lambda/shortland 函数混淆