我可以强制进行非最佳逻辑条件检查吗?

Can I force unoptimal logical condition checking?

是否可以更改逻辑或 || 语句在 dart 中执行的方式。 例如。我有函数 foo()boo(),它们的 return 类型为 bool。如果我写

(foo() || boo()) ? /* A */ : /* B */;

foo() returns true boo()不会被执行。我希望能够改变它,但找不到这样做的方法。

我惊讶地发现这没有帮助:

bool helper = false;
helper = helper || foo();
helper = helper || boo();
(helper) ? /* A */ : /* B */

non-short-circuit boolean operators 是您要查找的词组,目前无法找到,请参阅https://github.com/dart-lang/sdk/issues/1080

boo() 仅在 foo() returns 为真时执行,因为无论如何结果都是假的(短路)。您必须强制执行显式执行,例如:

var f = foo();
var b = boo();
(f || b) ? print('false') : print('true');

如果您想内联使用它,您可以使用@AlexandreArdhuin 或

提到的自定义方法
[foo(), boo()].reduce((v1, v2) => v1 || v2)
    ? print('false') : print('true');

DartPad 试试吧。

can not use | in dart 但你可以编写一个像 or 这样的辅助函数并且语法非常接近:

main() {
  if (or([foo(), boo()])) {
    print('ok');
  }
}

bool or(List<bool> values) => values.fold(false, (t, e) => t || e);

bool foo() {
  print("foo");
  return true;
}

bool boo() {
  print("boo");
  return true;
}

DartPad 中尝试。