[英]Why is it better to throw an exception rather than return an error code?
傳統錯誤處理傾向於遵循所有函數根據成功/失敗返回代碼的方法。 您將檢查此代碼並適當處理(如果有錯誤)。
然而,現代編程語言遵循異常模型,如果發生了無法正確處理的異常情況,則會拋出異常 - 在處理之前會不斷冒泡。
我的問題是為什么我們要轉向異常模型? 這背后的原因是什么? 為什么更好?
解釋/鏈接將不勝感激。
我已經詳細地寫過這個: Exceptions vs. status returns ,但簡要地說:
擴展最后一點:如果你忘記做你應該做的狀態返回,你會忽略錯誤。 如果您忘記對異常做您應該做的事情,則異常會冒泡到軟件的外層,在那里它變得可見。
這里有幾個原因
is prepared to handle.狀態代碼通常比異常更好,因為它們表示函數的准備處理的情況。 狀態代碼的問題在於,如果立即調用代碼不處理它們,則很可能什么都不會。 如果代碼拋出異常並且立即調用的代碼不准備處理它,則異常將傳播到至少聲稱已准備好的代碼。
拋出異常是明確指出出現問題的,程序員更難忽略這一點(因為如果沒有 catch 塊,程序將終止)。
異常將終止函數其余部分的執行,並將控制權傳遞給下一個 catch 塊(如果當前調用堆棧中有任何。如果沒有,則程序將終止)
是的,它是可選的,但您應該始終使用.catch()
處理程序(用於 Promises)。
這意味着,我們可以在一個處理程序中處理許多函數中的許多錯誤,如下所示;
storeData()
.then(changeSomething)
.then(storeData)
.catch((e) => {
// Handle the error.
})
在這里我們可以看到如何處理三個不同函數的錯誤。 本質上,catch 的行為就像它將所有函數包裝在同步 try/catch 中一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.