iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Kotlin

Kotlin魔法:Spring Boot 3的fp奇幻冒險系列 第 8

[小草原] 錯誤處理超進化-Either

  • 分享至 

  • xImage
  •  

前情提要

昨天我們將錯誤定義出Domain type,那麼我們可以對這些type做更進一步的處理,就是Either!

Either是什麼?

有些語言 像是 F#稱為Result,概念是差不多的,英文翻譯是二者之一,意思就是它會有兩種type,左邊或者右邊,
Either的左邊為錯誤,右邊為正確,Right is Right,很好記XD
而F#的Result則是左邊為正確,右邊為錯誤。

好處?

我們不會講到FP深奧的Monad,可以把Either想像成一個盒子,而這個盒子放進參數後,出來的結果有兩種,A or B,因為在做一些事情的時候,可能會發生錯誤!
比如說我們FindUserById,有可能Id丟錯誤的值,導致這個function拋出exception,那麼我們有可能會忘記做處理,這樣程式就Crash了QQ,如果我們這時候使用Either包裝起來,那麼編譯器會要我們強制處理Either,看是要兩邊都處理,還是只處理其中一邊都可以。

番外篇

scott哥有一篇文章在講鐵道式編程
https://fsharpforfunandprofit.com/rop/
這樣的好處是,我們的結果如果是對的才會傳到下一個Either裡面去,如果某一個結果錯了,就不會繼續走下去,這樣做可以保證我們的Input至少有一點保障! 而且也方便我們做錯誤處理,因為我們不用管每一個function錯誤到底該去哪,只要給了Error type後,等到世界盡頭,在做最後的處理,有一種lean的味道XD
Decide as late as possible

參考資料

https://apidocs.arrow-kt.io/arrow-core/arrow.core/-either/index.html


上一篇
[小草原] Spring Boot 3 的錯誤處理與Domain type
下一篇
[小草原] 錯誤處理超進化-Either 實戰
系列文
Kotlin魔法:Spring Boot 3的fp奇幻冒險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言