Dart中是否有一种方法可以将函数标记为异常?

问题描述 投票:0回答:2

我试图在Flutter / Dart中找到一种方法来标记一个函数,该函数在执行过程中可能会引发异常。经过一段时间的搜索,我发现文档和Google都没有任何方法。

用其他语言,例如Swift,Java,Kotlin等,我知道我们有这样的机制。Swift中的示例代码是:

func doSomething() throws { ... }

有人知道Dart中是否存在吗?我认为这将很有用。

[如果由于Dart语言设计而不存在,那么也许任何人都可以解释此决定的原因。

提前感谢!

flutter dart try-catch throw
2个回答
0
投票

https://dart.dev/guides/libraries/futures-error-handlinghttps://dart.dev/codelabs/async-await希望这对您有帮助,因为第二种情况是您必须等待从服务器获取数据的情况


0
投票

Dart中无法将函数标记为可能抛出。

应该假定所有函数都可能抛出(如果没有其他原因,则是由于内存不足或堆栈溢出的情况)。

如果您查看Swift,throws大约是exceptions,而不是错误。 Dart不能区分两者,您可以抛出任何东西。 Swift已将自己置于Java(“必须声明所有抛出的异常”)和Dart或C#(“无法声明异常”)之间的位置。

将函数标记为“抛出”对编译器没有任何帮助,因为它必须假定所有其他函数也可能如此。使用Swift方法可以确保不会忽略带有明显标记的异常。除非您愿意,否则您可以try!它们并将异常转变为错误。

如果某个函数确实作为正常使用的一部分抛出,则应在该函数的文档中document。>>

Dart也有功能types

的问题。如果intint的函数可以抛出,则该函数是否与另一个函数intint的函数相同?将函数类型分为引发和非引发快速变得复杂。甚至更多,如果您想指定what,它会抛出。这不是不可能,但这又是一种复杂。

Dart null安全更新(当前正在处理)将获得的一件事是一种声明函数always抛出的方法。如果用空安全代码将返回类型设为Never,则类型系统将阻止您返回任何值,并且由于函数以返回值或抛出结束,因此将调用返回类型为Never的函数]可以only

以抛出结尾。
© www.soinside.com 2019 - 2024. All rights reserved.