TL;DR
- 関数型プログラミングでは、成功したか失敗したか、失敗の原因は何かを明示する。
- 例外ではなく
Result型を返すと、起こりうるエラーがシグネチャに現れる。
内容
関数型プログラミングでは、物事をできるだけ明示的にすることを重視する。エラー処理も同じで、成功したか失敗したか、失敗の原因は何かを明示する(Domain Modeling Made Functional 第8章 全域関数)。
例外を使うと、どんなエラーが起こるかがシグネチャから分からない。Domain Modeling Made Functional 第9章 最初のステップの実装で使った次の型では、住所の検証が失敗しうることが読み取れない。
type CheckAddressExists = UnvalidatedAddress -> CheckedAddressResult 型を使うと、失敗の可能性とその種類を型で表せる。
type CheckAddressExists =
UnvalidatedAddress -> Result<CheckedAddress, AddressValidationError>
and AddressValidationError =
| InvalidFormat of string
| AddressNotFound of string