首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dart条件语句中使用变量作为布尔值

在Dart条件语句中使用变量作为布尔值
EN

Stack Overflow用户
提问于 2022-09-06 17:32:57
回答 3查看 271关注 0票数 0

我从Python学习了Dart,我想知道什么是最接近于在条件语句中使用非布尔变量作为布尔值的Dart。就像使用字符串一样,空字符串是false,而非空字符串是true

例如,在Python中:

代码语言:javascript
复制
name = 'Yes'

print('True' if name else 'False') // 'True'

name2 = ''

print('True' if name else 'False') // 'False'

Dart是否有类似的东西,而不必将变量转换为布尔语句?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-06 19:11:53

Dart对于在测试中使用非布尔值没有任何支持。什么都没有。做不到。

测试位置中唯一允许的表达式是具有静态类型的表达式:

  • bool
  • dynamic (它被隐式地向下转换为bool,好像后面跟着as bool,如果它实际上不是一个总是在生成值之前抛出的bool.)
  • Never,),则在运行时抛出。

非空安全代码中的bool类型可以计算为null.如果发生这种情况,测试也会在运行时抛出。

因此,对于任何测试,如果测试表达式不计算为bool,则会抛出。您只能在实际的bool truefalse上进行分支。

如果您有一个值,您希望将null和空都视为false,我会这样做:if (value?.isEmpty ?? false) ...

票数 2
EN

Stack Overflow用户

发布于 2022-09-06 17:38:32

我认为这样的代码甚至不会编译。dart中的类型检查往往非常严格,每当编译试图计算不属于bool类型的条件时,就会引发错误。例如,以下内容无法编译:

代码语言:javascript
复制
final String value = "truthyValue" ? "truth" : "dare";

相反,dart在许多内置类型(如字符串、不同容器等)上提供了isNonEmptyisEmpty方法,因此您可以执行类似someString.isNotEmpty ? "good" : "bad";的操作。

票数 2
EN

Stack Overflow用户

发布于 2022-10-07 21:00:37

如果需要处理“0”或“00000”等特定值,则可以在任何类型上写入扩展。我非常喜欢它,因为它对于任何解析都很方便,而且如果您把它命名得很好,它是可读的。

代码语言:javascript
复制
extension BoolTest on String? {
  bool get toBool {
    if (this == null) {
      return false;
    } else {
      return true;
    }
  }
}

然后,您只需这样使用它:

代码语言:javascript
复制
String? a = 'hello';
String? b;
print(a.toBool);      // true
print(b.toBool);      // false
print('hello'.toBool) // true

看看:https://dart.dev/guides/language/extension-methods

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73625855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档