😀
Kotlin の Result 型の fold について
Result
型の fold
は、成功と失敗の両方のケースを一度に扱うための便利なメソッドです。
基本的な考え方
Result
は、ある処理が成功したか失敗したかを表現するための型です。
- 成功時: 正常な値が格納されている
-
失敗時: 例外(
Throwable
)が格納されている
fold
メソッドは、このどちらの場合にも対応できるように、2 つのラムダを受け取ります。
シグネチャ
public inline fun <R> Result<T>.fold(
onSuccess: (value: T) -> R,
onFailure: (exception: Throwable) -> R
): R
-
onSuccess
: 成功時に呼ばれ、成功時の値 (T
) を受け取って結果 (R
) を返す関数 -
onFailure
: 失敗時に呼ばれ、例外 (Throwable
) を受け取って結果 (R
) を返す関数
どちらの場合も、最終的に同じ型 R
の値に変換して返します。
使い方の例
以下は、Result<Int>
型の値を fold
で処理する例です:
fun processResult(result: Result<Int>): String {
return result.fold(
onSuccess = { value -> "成功: 値は $value です" },
onFailure = { exception -> "失敗: エラーが発生しました (${exception.message})" }
)
}
この例では、result
が成功なら数値を使ってメッセージを作り、失敗なら例外メッセージを使って別のメッセージを返します。
まとめ
-
簡潔に両方のケースを処理できる
fold
を使うことで、成功時と失敗時の処理を一つの呼び出しでまとめて書けます。 -
結果を統一された型に変換できる
成功でも失敗でも、最終的に同じ型R
の結果に「畳み込む(fold)」ので、後続の処理が楽になります。
fold
は、エラーハンドリングをシンプルに記述したい場合に非常に有用です。
Discussion