簡體   English   中英

Dart 中有沒有辦法將函數標記為拋出異常?

[英]Is there a way in Dart to mark a function as throwing an exception?

我試圖在 Flutter/Dart 中找到一種方法來標記一個在執行過程中可能拋出異常的函數。 在文檔和谷歌中搜索一段時間后,我沒有找到任何方法。

在其他語言中,例如 Swift、Java、Kotlin 等,我知道我們有這樣的機制。 Swift 中的示例代碼是:

func doSomething() throws { ... }

有誰知道這在 Dart 中是否存在? 我認為它會很有用。

如果由於 Dart 語言設計它不存在,那么也許任何人都可以解釋這個決定背后的原因。

提前致謝!

Dart 無法將函數標記為可能拋出。

應該假定所有函數都可能拋出(如果沒有其他原因,則是因為內存不足或堆棧溢出情況)。

如果你看看 Swift, throws是關於異常,而不是錯誤。 Dart 不區分兩者,你可以扔任何東西。 Swift 將自己置於 Java(“必須聲明所有拋出的異常”)和 Dart 或 C#(“無法聲明異常”)之間的位置。

將函數標記為“拋出”對編譯器沒有任何幫助,因為它必須假設所有其他函數也可能如此。 Swift 方法是為了確保不會忽略顯着標記的異常。 除非你想,那你可以try! 它們並將異常變成錯誤。

如果函數確實作為正常使用的一部分拋出,您應該在函數的文檔中記錄它。

Dart 也有函數類型的問題。 是從函數intint同類型從另一個函數intint ,如果后者能夠拋出? 將函數類型分為拋出和非拋出會很快變得復雜。 如果您想指定它拋出的內容,則更是如此。 這並非不可能,但這是一種復雜的情況。

您將通過 Dart 空安全更新(目前正在處理)獲得的一件事是一種聲明函數始終拋出的方法。 如果在空安全代碼中設置返回類型Never ,那么類型系統將阻止您返回任何值,並且由於函數調用必須以返回值或拋出來結束,因此對返回類型為Never的函數的調用可以只能以投擲結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM