http://okapies.hateblo.jp/entry/2016/12/15/021550
関数型プログラミングって何?
あらゆる関数には2組の入力と2組の出力がある。
2組の入力とは、関数実行前の世界変数と引数である。
2組の出力とは、関数実行後の世界変数と戻り値である。
副作用は常に表層に移せる
関数実行前の世界変数を渡さなくてもよくしよう。
例えば、
function getNexDays(int plusDays) { return (new Date()).addDays(plusDays); } ↓ function getNexDays(DateTime now, int plusDays) { return now.addDays(plusDays); }
引数は増えているが、それは隠れた依存関係を引数上に引きずり出しただけなので、複雑にはなっていない。
……いや、そうは言うけどさあ。なにかこれを実践するとうまくいかないんじゃないかという臭いがする。
function button1_click() { label1.Text = "clicked"; }
とかどうするのさ。