Dart明确区分了错误(表示代码逻辑中存在问题且永远不会发生且永远不会被捕获)和异常(表示基于运行时数据的问题).
我真的很喜欢这种区别,但我想知道什么时候我应该使用assert()
个函数?
Dart明确区分了错误(表示代码逻辑中存在问题且永远不会发生且永远不会被捕获)和异常(表示基于运行时数据的问题).
我真的很喜欢这种区别,但我想知道什么时候我应该使用assert()
个函数?
断言是一种只在开发中执行有用代码的方法,而不妨碍发布模式的性能——通常是为了防止类型系统中缺少功能导致的不良状态.
例如,只有断言可以用于进行防御性编程and提供常量构造函数.
我们可以做到:
class Foo {
const Foo(): assert(false);
}
但我做不到:
class Foo {
const Foo() { throw 42; }
}
同样,一些理智判断的费用也相对较高.
例如,在FLUTH上下文中,您可能希望遍历小部件树以判断小部件的祖先.但这是昂贵的,因为只有对开发人员有用的东西.
在断言中执行该判断既可以实现发布的性能,也可以实现开发中的实用程序.
assert(someVeryExpensiveCheck());