Functional Programmingの本では、副作用が次のように書かれています。オブジェクト Functional Programmingの副作用
- ファイルの読み書き
- 画面上の描画
私はちょうどそれが副作用である場合、ファイルに読み書きすることなく純粋な機能プログラムを書くことが可能であるかと思っています。はいの場合、これを達成するための機能的な世界での共通のアプローチは何でしょうか?
おかげで、 モハメド簡潔にするため
Functional Programmingの本では、副作用が次のように書かれています。オブジェクト Functional Programmingの副作用
私はちょうどそれが副作用である場合、ファイルに読み書きすることなく純粋な機能プログラムを書くことが可能であるかと思っています。はいの場合、これを達成するための機能的な世界での共通のアプローチは何でしょうか?
おかげで、 モハメド簡潔にするため
は、私を(以上)短い長い話を単純化して作ってみましょう:純粋関数型プログラミングの「副作用」に対処するために、あなた(プログラマ)は、純粋な関数を書きますインプットからアウトプットへと変化し、システムはそれらの純粋な機能を「実世界」に適用することによって副作用を引き起こす。たとえば、整数x
を読み取り、x+1
と書く場合は、関数f(x) = x+1
を書いて(実際には)、システムはそれを実際の入力に適用し、その戻り値を出力します。別の例として、副作用として例外を発生させる代わりに、pure関数は例外を表す特別な値を返します。 HaskellのIO
のような様々な "モナド"は、これらのアイデアを一般化しています。すなわち、純粋な関数による副作用を表しています(実際はの実装はもちろん複雑です)。
だと思います。 私たちは常に副作用をプログラムしています。あなたのプログラムが全く何もしていなければ、目標は完全に回避されていません。 目標は可能な限り多くの純粋なコードを書くことです。それはあなたが不潔な者からできる限り多くのことをする。 – cstuncsik
[機能的な言語はどのように副作用をモデル化していますか?](0120-385-331) – sepp2k
@ cstuncsikの考えを続けるには、これを部分的に行うことで、分離された純粋でないコードが、私たちがテストする気にしない部分です。これは「私たちが書いていること」ではありません。残りの部分(純粋に「書く」もの)を純粋に作ると、予測可能/テスト可能であり、不純なものの表面は最小限に抑えられます。 – jinglesthula