相談フォーム信頼の「飲んだくれマーク」をご確認下さい。Programming)です。FPは関数を組み合わせたプログラミング手法だそうです。はじめにこれを聞いた時、私は思った。今までの構造化プログラミングはそもそも関数の組み合わせだったのではないか?C言語もJavaも関数を組み合わせてプログラムを作っている。それらとこれから学ぶ関数型プログラミングの本質的な違いはなんだろうか。function)だけを使ってプログラムを構築することが前提となります。純粋関数とは副作用のない関数のことです。副作用のない関数とは、関数の出力が引数として与えられた値のみによって決定され、また内部処理を行う過程でプログラムのその他の部分に何ら影響を及ぼさないような関数である。逆にインスタンスのメンバ変数(フィールド)やグローバル変数を参照して何かの処理を行うような関数は副作用のある関数である。Getterは純粋関数ではない。下記のsetAgeは関数外のageという変数の状態を書き換えている。old以下は純粋関数といえる。old懸命な読者のみなさんは「あれ?printlnって副作用じゃね?」と思ったのではないでしょうか。標準出力の内部状態を変化させているのでこれは厳密に言えば副作用のある関数だ。いうか、I/O処理は本質的に内部状態を変化させる副作用のある処理である。関数型プログラミングでI/Oを扱うには、たとえばHaskellだとIOモナドという仕組みがあるそうだ。ここではまだprintln程度は勘弁してほしい。ある関数が副作用を伴うかどうか判定するとき、参照透過性が保たれているかどうかを確かめるとわかりやすい。参照透過性の定義について、FPinScalaでは下記のように書かれている:式eがあり、すべてのプログラムpにおいて、pの意味に影響をあたえることなく、p内のすべてのeをeの評価結果と置き換えることができるとしたら、eは参照透過です関数型プログラミングでは副作用のない関数のみを組み合わせてプログラムを構築するスタイルを取る。副作用は常に悪ではないが、副作用を伴わない関数のみを用いることで以下のようなメリットが生まれる。wantを表現している)コードが簡潔になる並列計算が容易に実現できる(≒マルチコアCPUを100%まで使ってくれる)テスタビリティの高さ(同時にモックも容易に作れる)特に私が大きなメリットだと思うのはコードが簡潔になるという点だ。私は大量のコードを書くのは多くの場面で悪だと思っている。同じことを実現する短いコードと長いコードがあったとき、ほとんどの場面で短いコードのほうが偉い。人はコードを書けば書くほどバグを生み出す。コードを書く量が少なければバグも少なくなるし、テストコードやテストにかかる手間も減る。過度に簡潔な表記、たとえばほとんどすべての処理を長いワンライナーで書くことが正義だとは思っていない。function)だけを使ってプログラムを構築するある関数が参照透過であるとき、それは純粋関数となる。1回めは関数型プログラミングのさわりを説明したつもりだ。次回以降はラムダ式と高階関数について述べたいと思う。まえがき無痛分娩で妻が出産しましたanopara作者:withpop昼はサラリーマン。頑張れば何でも出来る。