Skip to content

関数型プログラミング チェックリスト(Functional Programming Checklist)

※ CLI やプレーンな形式で使いやすい、テキスト版チェックリストです。

■ 純粋関数(Pure Functions)

  • [ ] 同じ入力に対して常に同じ出力を返しているか?
  • [ ] 関数内に副作用がないか?
  • [ ] I/Oや状態変更、ランダムや日時など非決定的な要素を扱っていないか?

■ 不変性(Immutability)

  • [ ] 状態や変数を変更せず、新しい値を返しているか?
  • [ ] ミュータブルなデータ構造を使用していないか?

■ 合成性(Composability)

  • [ ] 関数は小さく分離され、他の関数と組み合わせて使えるか?
  • [ ] pipe や compose による構成ができるか?
  • [ ] 高凝集・疎結合な設計になっているか?

■ 宣言的スタイル(Declarative Style)

  • [ ] 処理の「手順」ではなく「意図」が記述されているか?
  • [ ] 命令型構文(for文やif文)を避け、map / filter / reduce などを使っているか?

■ 副作用の封じ込め

  • [ ] 副作用のある処理(HTTP, ログ出力など)を関数型の外部に隔離しているか?
  • [ ] Task / IO / Observable などの制御可能な仕組みで扱っているか?

■ 高階関数(Higher-Order Functions)

  • [ ] 関数を引数に、または戻り値として扱っているか?
  • [ ] 汎用的で再利用可能な設計になっているか?

■ データと処理の分離

  • [ ] データ構造と処理が明確に分離されているか?
  • [ ] 特定のデータ構造に依存したロジックになっていないか?

■ エラーハンドリングの明示性

  • [ ] 例外ではなく Option / Either / Result などで失敗を表現しているか?
  • [ ] エラー処理が関数合成の一部として管理されているか?

■ テストのしやすさ

  • [ ] 関数は小さく、純粋で、単体テストしやすいか?
  • [ ] 状態や副作用に依存せずに検証できるか?

■ 状態の明示的な管理

  • [ ] 状態の変化が明示的に設計されているか?
  • [ ] ストリームやデータ構造を用いて管理されているか?
  • [ ] 暗黙の共有状態を避けているか?

Released under the CC-BY-4.0 license.