Tuesday, December 3, 2024

如何使用 assert ,它跟 exception 不一樣喔!

參考連結

有兩個很常見的 Exception handling 不良風格

1. 濫用 :pre 和 :post 來做檢查,而不是使用 spec 或 malli

2. catch Throwable

```

(try

(assert false)

(catch Throwable e

"Barfoo"))

```

理由是類似的:

(1) Error => 程式有 bug ,設計時不考慮 catch 它。這種可以用 assert 。
(2) Exception => 程式沒有 bug 但是執行的時候遇到異常,設計時可以考慮 catch 它。

註:

(a) 用 : pre 和 : post 的話,會丟出 Error ,但是一般的格式錯誤是 Exception
(b) catch Throwable 的話,會 catch 到 Error ,但是我們只應該 catch Exception ,不應該 catch Error 。