首页 > 解决方案 > Dart 中的 assert()、异常、错误有什么区别?

问题描述

根据以下资源: https ://api.dart.dev/stable/2.4.0/dart-core/Exception-class.html https://api.dart.dev/stable/2.4.0/dart-core /Error-class.html https://groups.google.com/a/dartlang.org/g/misc/c/lx9CXiV3o30/m/s5l_PwpHUGAJ?pli=1 https://groups.google.com/a/dartlang .org/g/misc/c/lx9CXiV3o30/m/s5l_PwpHUGAJ?pli=1

我非常清楚 anException和 an之间的区别是什么Error

我也理解断言是如何工作的。在生产代码中删除了所有断言语句。一个失败assert的语句抛出一个AssertionError,这是有道理的,因为一个失败的断言总是程序员的错。

但是现在出现了以下问题:(问题 1)我什么时候应该抛出一个Error(或 的子类Error),什么时候应该使用 assert 语句?这两个概念的目的是提醒程序员他犯了一个错误。

给定以下方法(请假设一个更复杂的用例):

void test(Test test){
   // assert or throw ArgumentError here?
   test.abc();
}

我可以确保满足该方法的先决条件,使用assert(test != null),或通过if(test == null) throw ArgumentError.notNull("test");。在这两种情况下,程序在生产中都会失败,但是在使用 assert 时,我得到 aNoSuchMethodError因为断言已被删除,而在抛出 an 时,ArgumentError它更详细,因为ArgumentError直接指向底层问题(该方法以 null 作为参数调用)。

如上所示,程序在生产中的两种情况下都失败了。但是抛出错误会提供有关问题原因的更多详细信息。

(问题2)为什么Flutterassert到处都用,而不是抛出Errors?

标签: flutterdart

解决方案


推荐阅读