Некоторое время я работал с node.js над приложением для чата (я знаю, очень оригинальным, но я подумал это был бы хороший обучающий проект). Underscore.js предоставляет множество интересных концепций функционального программирования, поэтому я хотел бы понять, как будет настроена функциональная программа на JavaScript.
Насколько я понимаю функциональное программирование (что может быть неправильным), вся идея состоит в том, чтобы избежать побочных эффектов, которые в основном связаны с функцией, которая обновляет другую переменную вне функции, так что что-то вроде
var external;
function foo() {
external = 'bar';
}
foo();
будет создавать побочный эффект, верно? Итак, как правило, вы хотите избежать мешающих переменных в глобальной области видимости.
Итак, как это работает, когда вы имеете дело с объектами, а что нет? Например, много раз у меня будет конструктор и метод инициализации, который инициализирует объект, например:
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 программы, которая пытается быть максимально функциональной, это также было бы очень признательно. Я чувствую, что близок к тому, чтобы "понять это", но я не совсем там. В основном меня интересует, как функциональное программирование работает с традиционной концепцией классов ООП (или избавляется от нее для чего-то другого, если это так).