【问题标题】:how should I use assert in Dart?我应该如何在 Dart 中使用断言?
【发布时间】:2020-05-09 06:14:49
【问题描述】:

我看到了类似的示例代码:

class ModelBinding extends StatefulWidget {
  ModelBinding({
    Key key,
    this.initialModel = const GalleryOptions(),
    this.child,
  })  : assert(initialModel != null),
        super(key: key);
...

所以我写了一些东西:

class Person {
  String firstName;

  Person({name}){
   print(name);
  }
}

class Employee extends Person {
  Employee(String name) : assert(false), super(name: name);
}

main() {
  var emp = new Employee('Jason');
}

不管是assert(false)还是assert(true),结果都是一样的。

那么assert是什么意思呢?

【问题讨论】:

  • 这与其他编程语言相同(例如PythonCJava,...)。您没有看到任何效果,因为您可能正在运行未启用断言的代码的发布版本。改为运行调试版本。

标签: dart


【解决方案1】:

assert 用于调试,仅表示条件应为true 才能继续。让我解释一下:

class MyClass {
  final int age;

  MyClass({this.age});

  void someMethod() {
    // using `age` here
  }
}

如果传递的agenull,您可能会在someMethod 中遇到问题,因此要确保它不是null,您可以使用assert,例如:

class MyClass {
  final int age;

  MyClass({this.age}) : assert(age != null, "Make sure age isn't null");

  void someMethod() {
    // using `age` here
  }
}

【讨论】:

  • 如果我不在那里放置断言检查怎么办?我最终会在someMethod 中得到 null age 的错误,并且会发现问题并处理 null 值以使其无法在生产模式下获取! (因为我最终会在方法中得到与 null 相关的异常)。所以我可以在没有断言的情况下处理!整个assert有什么用我不知道!!!问题是我使用断言在调试模式下检查错误,但在生产模式下检查是无用的。因此,我可以检查空值,而不是编写那些断言检查!希望你能解决我遇到的问题。
  • @Patzu assert 仅在调试模式下工作,您还可以使用调试模式来测试您的应用程序。因此,在测试时,您确保没有通过 null 值,因此在生产模式下不会有 null 值。但是,由于 Dart 为空安全,assert 的含义为零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2020-07-10
  • 2013-08-21
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多