Я работал с 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 программы, которая пытается быть настолько функциональной, насколько это возможно, это также очень ценится. Я чувствую, что я близок к тому, чтобы "получить это", но я просто не совсем там. В основном меня интересует, как функциональное программирование работает с традиционной концепцией классов ООП (или устраняет это для чего-то другого, если это так).