0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Clean Architecture】Functional Programming(関数型プログラミング)

Last updated at Posted at 2025-09-29

1. 概要

関数型プログラミング(Functional Programming, FP) は、数学における「関数」の考え方を基盤にしたプログラミングパラダイムです。

  • 副作用を避ける(pure functions)
  • 状態を持たない(immutability)
  • 関数を第一級の値として扱う

という特徴があり、宣言的スタイルで「何をするか」を書くことに重点を置きます。


2. 歴史

  • 1950年代:LISP が登場し、関数型言語の原型に
  • 1990年代〜2000年代:Haskell や ML 系が研究・学術分野で活用
  • 2010年代以降:Scala、Elixir、F# などが商用開発でも普及
  • 現在:Kotlin / Java / JavaScript / Swift などモダン言語が OOP + FP ハイブリッド を採用

3. 特徴

  • イミュータブル(不変性)
    変数を書き換えず、新しい値を返す
  • 純粋関数(Pure Function)
    入力が同じなら必ず同じ出力を返し、副作用を持たない
  • 高階関数(Higher-order function)
    関数を引数・戻り値として扱える
  • 関数合成(Composition)
    小さな関数を組み合わせて大きな処理を作る
  • 宣言的スタイル
    命令ではなく「変換」を記述する

4. メリット

  • テスト容易性:純粋関数は予測可能でユニットテストに強い
  • 並列・並行処理に強い:不変性によりスレッドセーフ
  • 安全性:副作用が少なくバグを減らす
  • 簡潔性:map/filter/reduce で短く書ける

5. Kotlinによる例:FizzBuzz

(1)シンプルな純粋関数

fun fizzBuzz(n: Int): String =
    when {
        n % 15 == 0 -> "FizzBuzz"
        n % 3 == 0 -> "Fizz"
        n % 5 == 0 -> "Buzz"
        else -> n.toString()
    }

fun main() {
    (1..20)
        .map(::fizzBuzz) // 関数を適用
        .forEach(::println)
}

fizzBuzz は「入力 → 出力」のみを持つ純粋関数。
(1..20).map(::fizzBuzz)「データをどう変換するか」 を宣言的に表現。


6. 代表的な言語

Lisp(1958)

  • 最初の関数型言語。AI研究に広く利用された

Haskell(1990)

  • 純粋関数型言語。学術界から商用利用へ広がった

ML / OCaml / F#

  • 静的型付きFP言語。金融システムや数理分野で利用

Erlang / Elixir

  • 並行処理に強いFP言語。WhatsAppや電気通信システムで利用

Scala

  • JVM上でOOP + FPを統合。大規模分散システムに強い

JavaScript / TypeScript / Kotlin / Swift

  • 近年はモダン言語がFP的要素(map/filter/reduce, ラムダ式)を取り込んでいる

7. OOP との比較

観点 OOP FP
中心概念 オブジェクト 関数
データ 状態を持ちうる 基本的に不変
拡張性 継承・ポリモーフィズム 関数合成・高階関数
強み 大規模開発、現実世界のモデリング 並列処理、データ変換、安全性

まとめ

  • FPは 「関数を第一級市民」とするパラダイム
  • 副作用を避け、イミュータブルな世界で安全に計算する
  • KotlinはOOP言語でありながら、FP的スタイルを自然に取り込める
  • 現代の開発では OOP + FP のハイブリッドが主流

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?