TL;DR

  • 関数型プログラミングでは、成功したか失敗したか、失敗の原因は何かを明示する。
  • 例外ではなく Result 型を返すと、起こりうるエラーがシグネチャに現れる。

内容

関数型プログラミングでは、物事をできるだけ明示的にすることを重視する。エラー処理も同じで、成功したか失敗したか、失敗の原因は何かを明示する(Domain Modeling Made Functional 第8章 全域関数)。

例外を使うと、どんなエラーが起こるかがシグネチャから分からない。Domain Modeling Made Functional 第9章 最初のステップの実装で使った次の型では、住所の検証が失敗しうることが読み取れない。

type CheckAddressExists = UnvalidatedAddress -> CheckedAddress

Result 型を使うと、失敗の可能性とその種類を型で表せる。

type CheckAddressExists =
  UnvalidatedAddress -> Result<CheckedAddress, AddressValidationError>
 
and AddressValidationError =
  | InvalidFormat of string
  | AddressNotFound of string

キーワード