2008-09-28 18 views
59

Estoy buscando entender los conceptos de programación funcional.Javascript como un lenguaje funcional

que he usado durante muchos años Javascript para script del lado del cliente en aplicaciones web y además de utilizar prototipos todo era sencilla manipulación del DOM, validación de la entrada etc.

En los últimos tiempos, que tienen often read que Javascript es una de los lenguajes que soportan la programación funcional.

Con mi familiaridad y experiencia con Javascript, mi preferencia es usarlo para aprender programación funcional. Espero poder concentrarme más en los principales conceptos funcionales y no enredarme o distraerme con una sintaxis completamente nueva.

¿En resumen, es Javascript una buena opción para aprender conceptos de programación funcional? ¿Qué capacidades en Javascript son relevantes/apoyan la programación funcional?

+0

La mejor manera de hacerlo es completamente funcional. Entonces comprenderás los pros y los contras. – andho

Respuesta

6

Aunque javascript admite FP hasta cierto punto, no lo alienta directamente. Es por eso que existen proyectos como Oliver Steele's Functional, para llenar los vacíos. Entonces no lo recomendaría para aprender FP. Echa un vistazo a F # en su lugar.

+0

Gracias por el enlace, tengo algo de lectura que hacer. – Ash

2

Javascript es un lenguaje multi-paradigma. Si su objetivo es aprender conceptos de lenguaje funcional, intente comenzar con un lenguaje funcional puro como OCaml o Haskell.

+9

¿Qué significa la "O" en "OCaml", una vez más? – xmjx

+0

+1. Objetivo Caml, y por lo tanto, no es funcional pura, sino multi-paradigma también, ya que agrega OO. – Dereckson

6

Diría que aunque puede comprender rápidamente algunos conceptos de programación funcional con JavaScript, usar JavaScript consistentemente como un lenguaje de programación funcional no es una práctica común. Al menos no obviamente común. La mayoría de las personas no publican tutoriales que identifiquen cómo hacer programación funcional con JavaScript; la que señaló marxidad es en realidad un ejemplo bastante decente, pero no encontrará mucho de eso. Los aspectos funcionales a menudo no son evidentes, como cuando las personas usan cierres en JavaScript, pero no saben que lo están haciendo.

La idea de que pasaría dos funciones como argumentos a una tercera función, y luego el valor devuelto será una ejecución relacionada con las dos primeras funciones es una técnica avanzada que casi siempre aparece solo en el núcleo de full- bibliotecas voladas como jQuery. Las funciones anónimas autoejecutables y similares han ganado terreno, pero aún no se usan de manera consistente. La mayoría de los tutoriales a menudo se centran en las capacidades de OO de JavaScript, como la forma de crear propiedades y métodos, el alcance, el control de acceso y también cómo usar la propiedad prototipo de los constructores. Honestamente, si la programación funcional es lo que quieres, entonces elegiría un idioma conocido estrictamente para esta capacidad.

+0

Puntos útiles, gracias. Un lenguaje funcional más dedicado puede ser una mejor opción. Es posible que tenga un vistazo a F # después de todo. – Ash

9

Higher Order Javascript es un gran forma de familiarizarse con los aspectos funcionales de javascript. También es una lectura relativamente corta en caso de que quiera mojarse los pies sin sumergirse en un libro más grande.

3

Recomendaría leer The Little Schemer, que es un libro bastante delgado sobre la recursión y es una buena introducción al estilo funcional. Si bien está enfocado en Scheme, se puede aplicar fácilmente a JavaScript, consulte http://javascript.crockford.com/little.html. Lo encontré realmente útil en mi desarrollo de JavaScript, aunque se vuelve bastante complicado hacia el final.

6

No recuerdo quién lo dijo, pero se ha llamado javascript "Scheme with Algol syntax". Entonces, para aprender Scheme/Lisp, Javascript no es un mal comienzo. Sin embargo, tenga en cuenta que los lenguajes funcionales como Lisp son bastante diferentes de los lenguajes funcionales puros, como Haskell.

Aparte de las "funciones de primera clase" (lo que significa que las funciones son valores, que se pueden asignar a variables), el alcance léxico también es una parte inherente de lo que hace un lenguaje funcional.

Higher Order Javascript y The Little Javascripter ya se ha mencionado. Ambos son textos excelentes. Además, Higher Order Programming in Javascript puede ser un comienzo más fácil.

Cuestiones relacionadas