Functional Programming中處理Exception的方法
前言 以前剛從Java轉換到其他語言時有個困擾,就是Checked Exception(受檢例外)不見了。這會導致呼叫function的時候,難以判斷程式到底會不會丟出Exception。 其實關於Checked Exception的討論在網路上已經很多了,我google了兩篇覺得寫得還不錯的,覺得應該 存在的正方 [1],覺得 不應該存在的反方 [2],講起來其實都有些道理。 我自己比較偏向Checked Exception必須存在,但更準確來說是「我自己的checked exception應該要存在」。在設計自己的function時,若出現需要raise exception的情況,必定是我覺得這個東西要知會上層中斷流程,並做出一定的處理。而這應該存在於function的interface當中,不該讓同事看了文件或看了原始碼才發現要處理例外。 至於其他library的程式碼,我是覺得隨意。一方面大多數library並不會隨便丟出錯誤。另一方面就算他丟出錯誤,很大部分也是無法處理的錯誤,就讓他直接丟到頂端被top level的try catch給接住也無妨。 嘗試: 回歸錯誤碼檢查 既然想讓exception在function的介面上展現,最簡單的一個方法就是用class給包裝起來。(下面用dart程式碼呈現) class Result { Result ( this . result ) ; Result . error ( this . error ) ; int result ; Exception error ; } 先宣告一個class,裡面有正常的回傳值,也有異常的回傳值。 若程式正常執行則使用預設的constructor,出現錯誤則用error的constructor。如下 Result func ( ) { return Result ( 0 ) ; // return Result(Exception("Error!!!")); } void main ( ) { Result v = func ( ) ; if ( v . error != null ) { // 處理錯誤 return ; } } 在程...