私はしばらくの間、チャット アプリでnode.jsを使用してきました (私は知っていますが、非常に独創的ですが、良い学習プロジェクトになると考えました)。Underscore.jsは興味深い関数型プログラミングの概念を数多く提供しているので、JavaScript で関数型プログラムをセットアップする方法を理解したいと思います。
関数型プログラミングの私の理解から(間違っているかもしれません)、全体的なアイデアは副作用を避けることです.
var external;
function foo() {
external = 'bar';
}
foo();
副作用を引き起こしますよね?そのため、原則として、グローバル スコープ内の変数を乱すことは避けたいと考えています。
では、オブジェクトを扱っているときとそうでないとき、それはどのように機能するのでしょうか? たとえば、多くの場合、次のようにコンストラクターとオブジェクトを初期化する init メソッドを使用します。
var Foo = function(initVars) {
this.init(initVars);
}
Foo.prototype.init = function(initVars) {
this.bar1 = initVars['bar1'];
this.bar2 = initVars['bar2'];
//....
}
var myFoo = new Foo({'bar1': '1', 'bar2': '2'});
したがって、私の init メソッドは意図的に副作用を引き起こしていますが、同じような状況を処理する機能的な方法は何でしょうか?
また、可能な限り機能するプログラムの Python または JavaScript のソース コードを誰かが教えてくれれば、それも大歓迎です。「理解」に近づいているように感じますが、完全には達成できていません。主に、関数型プログラミングが従来の OOP クラスの概念でどのように機能するかに興味があります (または、そうであれば、別の何かのためにそれを廃止します)。