我试图在Flutter / Dart中找到一种方法来标记一个函数,该函数在执行过程中可能会引发异常。经过一段时间的搜索,我发现文档和Google都没有任何方法。
用其他语言,例如Swift,Java,Kotlin等,我知道我们有这样的机制。Swift中的示例代码是:
func doSomething() throws { ... }
有人知道Dart中是否存在吗?我认为这将很有用。
[如果由于Dart语言设计而不存在,那么也许任何人都可以解释此决定的原因。
提前感谢!
https://dart.dev/guides/libraries/futures-error-handling&https://dart.dev/codelabs/async-await希望这对您有帮助,因为第二种情况是您必须等待从服务器获取数据的情况
Dart中无法将函数标记为可能抛出。
应该假定所有函数都可能抛出(如果没有其他原因,则是由于内存不足或堆栈溢出的情况)。
如果您查看Swift,throws
大约是exceptions,而不是错误。 Dart不能区分两者,您可以抛出任何东西。 Swift已将自己置于Java(“必须声明所有抛出的异常”)和Dart或C#(“无法声明异常”)之间的位置。
将函数标记为“抛出”对编译器没有任何帮助,因为它必须假定所有其他函数也可能如此。使用Swift方法可以确保不会忽略带有明显标记的异常。除非您愿意,否则您可以try!
它们并将异常转变为错误。
如果某个函数确实作为正常使用的一部分抛出,则应在该函数的文档中document。>>
Dart也有功能types
的问题。如果int
到int
的函数可以抛出,则该函数是否与另一个函数int
到int
的函数相同?将函数类型分为引发和非引发快速变得复杂。甚至更多,如果您想指定what,它会抛出。这不是不可能,但这又是一种复杂。Dart null安全更新(当前正在处理)将获得的一件事是一种声明函数always抛出的方法。如果用空安全代码将返回类型设为Never
,则类型系统将阻止您返回任何值,并且由于函数以返回值或抛出结束,因此将调用返回类型为Never
的函数]可以only