高階函數的錯誤處理

在前面我們學了錯誤處理try、catch,接下來我們來看看Kotlin裡面有一個用來做錯誤處理的類別Result

在Kotlin裡面要產生Result物件有三種方式

runCatching { 1 }
Result.success(1)
Result.failure<Int>(Exception())

Result使用isSuccess跟isFailure來判斷是否有抓到錯誤,接下來我們來看看Result有什麼樣的函數可以使用

get系列

get可以拿來取的Result裡面儲存的物件,並且可以選擇要如何處理錯誤

result.getOrNull()
result.getOrThrow()
result.getOrDefault(1)
result.getOrElse { 1 }
result.exceptionOrNull()

map系列

map系列的函數可以轉換裡面儲存的物件

result.map { it + 1 }
result.mapCatching { it + 1 }

recover系列

recover系列的函數可以將抓到的錯誤轉換成成功的物件

result.recover { 1 }
result.recoverCatching { 1 }

行動系列

行動系列的函數可以在成功或是失敗的時候執行動作

result.onSuccess { println(it) }
result.onFailure { println(it.message) }

fold

fold函數可以為Result物件做最後處理,並且回傳物件

result.fold(
    onSuccess = { it },
    onFailure = { 1 }
)

Last updated