He estado trabajando con node.js durante un tiempo en una aplicación de chat (lo sé, muy original, pero pensé que sería un buen proyecto de aprendizaje). Underscore.js proporciona una gran cantidad de conceptos de programación funcional que se ven interesantes, así que me gustaría entender cómo se configuraría un programa funcional en JavaScript.¿Cómo se presenta una aplicación de JavaScript funcional basada en programación?
De mi comprensión de la programación funcional (que puede estar equivocado), la idea es evitar efectos secundarios, que son, básicamente, tiene una función que actualiza otra variable fuera de la función así que algo como
var external;
function foo() {
external = 'bar';
}
foo();
estaría creando un efecto secundario, ¿correcto? Por lo tanto, como regla general, desea evitar variables perturbadoras en el alcance global.
Ok, entonces, ¿cómo funciona eso cuando se trata de objetos y qué no? Por ejemplo, muchas veces, voy a tener un constructor y un método init que inicializa el objeto, así:
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'});
efectos secundarios Así que mi método init se causen intencionalmente, pero lo que sería una forma funcional para manejar el mismo tipo de situación?
Además, si alguien pudiera indicarme un código fuente de Python o JavaScript de un programa que intenta ser lo más funcional posible, eso también sería muy apreciado. Siento que estoy cerca de "conseguirlo", pero simplemente no estoy allí. Principalmente estoy interesado en cómo funciona la programación funcional con el concepto tradicional de clases OOP (o elimina algo diferente si ese es el caso).
Solo quería señalar que ahora me doy cuenta de que un método Foo.init realmente no tiene sentido si estás tratando de cumplir con la programación funcional, porque la única razón que tendría para un método init sería si Quería volver a inicializar un objeto Foo después ... lo cual es totalmente contrario a la idea de inmutabilidad. Entonces, en lugar de eso, debería hacer lo que sea necesario para inicializar el objeto en el constructor, y la próxima vez que necesite actualizar el objeto Foo o reiniciarlo, solo hago una nueva instancia de Foo y trato con eso. ¡Todo comienza a tener sentido! – user126715