paginas - javascript pdf
Es Javascript un lenguaje de programación funcional? (13)
El hecho de que las funciones sean objetos de primera clase, cierres y funciones de orden superior, ¿merece Javascript llamarse lenguaje de programación funcional? Lo principal que creo que le falta es Funciones Puras, y no ''se siente'' como otros lenguajes funcionales, como el ceceo (aunque esa no es realmente una buena razón para que no sea un lenguaje funcional ...)
¡En Javascript, puedes hacer algo como esto!
// Data
var fruits = [
{ name: ''apple'', price: 5 },
{ name: ''orange'', price: 10 },
{ name: ''lemon'', price: 15 }
]
// Request Data from magicURL
request(''magicURL'')
.then(selectKeyOf(''price''))
.then(priceMethod(''sum''))
.then((result)=>{
console.log(result) // 30
})
He hecho una página de github para demostrar este concepto y puedes clonar / ver mi implementación
@ petraszd Reescribo un poco tu código para obtener un operador "nuevo" para el operador:
function ffor(a, b, f){
function it(i){
if(i > b)return
f(i)
it(i+1)
}
it(a)
}
print("----" + new Date()+"----")
var funcs = []
ffor(0, 9, function(i){
funcs.push(function(){return i})
})
ffor(0, 9, function(i){
print(funcs[i]())
})
Pero sé que esta forma tiene desventajas para los bucles grandes ...
Pregunta relacionada sobre la optimización de la recurtición de la cola en JS
PS Publicado aquí porque tenemos problemas con el formato del código mientras publicamos como comentario
Bueno, no diría que es programación funcional, pero diría que está orientada a objetos y hoy un amigo dijo que tampoco la pondría en ese estante.
Entonces, aunque no diría que es, creo que hay lugar para la opinión. Tiene características clásicas de programación funcional, no tiene otras.
Como sabemos, el lenguaje de programación funcional no permite cambiar o mutar los elementos (estado) de las funciones, pero en javascript está permitido en ese sentido no es un lenguaje de programación funcional, aunque sí trata la función como ciudadanos de primera clase.
El término "lenguaje de programación funcional" está tan sobrecargado que en estos días es casi inútil. Hay dos significados dominantes:
- Tiene funciones de primera clase
- Javascript es esto!
- Se basa en las funciones utilizadas en el cálculo lambda, con énfasis en evitar el estado variable persistente (a menudo reemplazándolo con parámetros pasados a funciones)
- Como se escribe comúnmente, ¡Javascript no es remotamente esto!
Elija su significado y luego la pregunta es responsable.
Javascript es un punto. Depende realmente de cómo se programe. Si codigo de manera OO, ¿no sería OO? Entonces, si solo codificas las cosas de una manera ''funcional'', sería funcional. Supongo que es un lenguaje multi-paradigma, por lo que llamarlo una sola cosa no es del todo exacto.
Lo que realmente odio en javascript (si tratas de verlo como lenguaje FP) es este:
function getTenFunctionsBad() {
var result = [];
for (var i = 0; i < 10; ++i) {
result.push(function () {
return i;
});
}
return result;
}
function getTenFunctions() {
var result = [];
for (var i = 0; i < 10; ++i) {
result.push((function (i) {
return function () {
return i;
}
})(i));
}
return result;
}
var functionsBad = getTenFunctionsBad();
var functions = getTenFunctions()
for (var i = 0; i < 10; ++i) {
// using rhino print
print(functionsBad[i]() + '', '' + functions[i]());
}
// Output:
// 10, 0
// 10, 1
// 10, 2
// 10, 3
// 10, 4
// 10, 5
// 10, 6
// 10, 7
// 10, 8
// 10, 9
Necesita comprender el entorno de pila JS (no lo hago si es el término correcto) para comprender tal comportamiento.
En el esquema, por ejemplo, simplemente no se puede producir tal cosa (Ok, vale, con la ayuda de referencias de idiomas subyacentes puedes hacerlo):
(define (make-ten-functions)
(define (iter i)
(cond ((> i 9) ''())
(else (cons (lambda () i) (iter (+ i 1))))))
(iter 0))
(for-each (lambda (f)
(display (f))
(newline)) (make-ten-functions))
No creo que haya una definición concreta de programación funcional, sin embargo, muchas de las cosas que las personas consideran "programación funcional" se pueden hacer con javascript. Aquí hay un buen breve ejemplo en este article.
Para mí, Javascript es a la vez un lenguaje imperativo y un lenguaje funcional, y puedes elegir usarlo de cualquier manera, e incluso ( egad ) en ambos sentidos. O puede elegir usar un paradigma y nunca tocar el otro. Tu decides. Yo, como tú, no creo que Javascript deba llamarse Lenguaje Funcional, porque te permite entrar y salir del paradigma de programación funcional. Quizás si tuviera un pragma de algún tipo, limitarlo usando solo paradigmas de programación funcional, entonces eso sería útil, creo. Pero, en resumen, digo que es más un lenguaje imperativo / de procedimiento con algunas características de programación funcional.
Repetir mi propia respuesta a una pregunta similar,
No hay una definición aceptada de lenguaje de programación funcional.
Si define el lenguaje funcional como el lenguaje que admite funciones de primera clase y lambdas, entonces sí, JavaScript * es * un lenguaje funcional.
Si también considera los factores como la compatibilidad con la inmutabilidad, los tipos de datos algebraicos, la coincidencia de patrones, la aplicación parcial, etc., entonces no, JavaScript * no es * un lenguaje funcional.
Te animo a que leas las siguientes publicaciones de blog relacionadas (y también los comentarios debajo de ellas):
Tiendo a pensar que los lenguajes de programación no tienen un paradigma en particular, sino que se prestan a ciertos paradigmas. Sin embargo, solo porque se presten a un paradigma particular no significa que tengas que usar ese paradigma. Es bastante posible escribir programas orientados a objetos en C y escribir programas imperativos en ML. No utilizar un cierto paradigma para resolver un problema porque el lenguaje no está diseñado porque se limita de forma artificial (por supuesto, debe tener en cuenta las limitaciones de un idioma al decidir si una solución en particular será una buena solución).
Yo diría que es un lenguaje multi-paradigma.
EDITAR: Es multi-paradigma e incluye construcciones funcionales.
si estira y tuerce el término "programación funcional" hasta el punto de discusiones filosóficas, esta pregunta puede volver a abrirse. Sin embargo, terminas en el nivel de preguntas útiles como "¿C ++ es realmente un lenguaje de programación"?
La respuesta a su pregunta en un nivel más diario es "no" .
La programación funcional significa que el programa se conceptualiza como una evaluación de una función, en lugar de un flujo de control. El código es una descripción de funciones y no tiene un concepto inherente de un flujo de control.
JavaScript tiene un flujo de control y se conceptualiza como un lenguaje imperativo. Desde su objetivo de diseño, claramente no es un lenguaje funcional.