0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

純粋関数について

Last updated at Posted at 2022-11-25

純粋関数とは

純粋関数は処理の複雑度を決める鍵でもある。
一つのソフトウェアで純粋関数を割合が多ければ多いほど、システム全体の複雑度は下がる。
では何を純粋関数と言えるのか。
関数が以下の条件を満たす場合純粋関数と言える。

純粋関数の条件

① 引数が同じの場合、常に同じ値を返す。
② 関数によってプログラムの状態が変化することはない。

以下のコードは純粋関数の例である。

javascript
function add(a, b) {
  return a + b
}

関数に引数として1, 2を入れると、必ず3を返す関数である。
関数の外部の影響を受けず、想定できる値が保証できる。
しかし、以下の関数はどうだろう。

javascript
let num = 2
function add(a) {
  return a + num
}

一見純粋関数に見えるが、よく見ると、関数外部の変数を参照していることがわかる。
number型のnumは、現在2の状態であるが、これが34に変更されたら、関数addが返す値はその都度変わってしまう。
関数が外部の影響を受けて返す値が変わってしまうこのような関数は純粋関数とは言えない。

なぜ純粋関数を使うのか。

純粋関数を使う理由としては以下の通りである。
① テストしやすい。
関数が返す値が想定できるため、テストコードを書くことが簡単になる。
② プログラムの複雑度を下げることができる。
1つの機能を持つ返り値が保証できる関数であるため、自然と得られる結果である。

では以下の例はどうだろう。

javascript
function returnFn() {
  return function sample () {
      console.log("hello world")
  }
}

関数を返す関数で、高段関数である。
結論から言うと、このような高段関数も純粋関数に属する。
純粋関数は、外部の影響を受けないという条件があるとのことから、上記のreturnFn関数はこの条件に当てはまることがわかる。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?