sábado, 31 de diciembre de 2011

Javascript para programadores funcionales - Parte 1

 ¿Por que no hablo de Coffee Script? 
 
  Basicamente por dos razones:
  • Lo miré por arriba, pero por ahora Coffee script no se banca todo lo que quiero
  • No siempre se pueden usar frameworks

¿Por que javascript y no otro?

   Por que es un lenguaje que uno facilmente puede odiar por no verle las posibilidades que nadie cuenta.  Si me dan las ganas voy a tratar de poner ejemplos de como se haría en Scala, Haskell, Python y si tengo ganas sobrenaturales lisp (perdon amantes de lisp, odio los parentesis).


¿Que me motiva?

  Cuando llegué al mundo de javascript y vi los frutos lo primero que pensé es: ¡Esto es una mierda!

   Pero después de entender javascript como javascript y no como lo que se hace con javascript ví la luz. Javascript no solo no es una mierda, sino que es hoy por hoy uno de mis lenguajes favoritos.
 
  Hay dos razones por la cual pasa esto:

   a) tengo objetos armados armados a partir de prototipos (por lo que tengo mixins en dos patadas)
   b) las funciones son datos.


  En los posts relacionados con el tópico me voy a dedicar al punto b.

 Las funciones son datos

  En javascript todo es un dato. Algunos datos son ejecutables otros no. Esto plantea una situación completamnete opuesta a la típica implementación de paradigma funcional, donde todo (incluyendo los datos) son funciones.

 En una situación opuesta, y con el soporte que tiene javascript a los tipos de datos (basicamente ninguno) uno tiene un montón de herramientas para poder llegar en pocos pasos al lado opuesto.

  En javascript la analogía se ve muy claramente a la hora de crear una funcion y asignarla a una varible:

var suma = function (a, b) {
   return  a + b
}


 Como se puede ver, suma es una variable y contiene una funcion, por lo que es un dato.
 Como buen lenguaje orientado a datos, los datos se pueden pasar por parametro, con lo que tenemos la libertad de hacer con las funciones lo que querramos. Lo unico importante es asegurarse de que lo que vamos a ejecutar sea una funcion y no un dato.

 ¿Y que ventajas de funcional puedo llevar a javascript?

  Bueno, hay varias ventajas que se pueden pensar y que voy a enumerar en adelante y que voy a ir explayando en varios articulos. Hay otras que no voy a nombrar por que bue, no tiene sentido (como el sistema de tipos de haskell) y otras que por ahora no se me ocurre como hacerlo sin asesinar un gatito a sangre fría.
  • Lazy evaluation (Evaluacion perezosa)
  • Lambda expressions (Funciones anonimas)
  • Currification - Partial Application (Aplicación parcial y currificación)
  • Highorder functions (Funciones de orden superior)
  • Monads (Mónadas -- esto no estoy seguro de que pueda hacer esto sin matar gatitos =P )

4 comentarios:

  1. coffe mas que un framework es una herramienta para escribir mas rapido tu codigo.

    No lo veas como un framework, un framework podria ser Jquery. Donde javascripts tradicional se convierte en algo simple y mas poderoso. Coffescript apunta a otra cosa. Podes usar coffescript con jquery si quisieras.

    Usar Javascripts pelado hoy en dia es un error.

    ResponderEliminar
  2. Si, tecnicamente coffee script es un bootstrap. Y si, js a secas no se si es un error, pero ble, podrías usar algo mas.

    ResponderEliminar
  3. pero bue, no quería entrar en detalles formales de lenguajes :P

    ResponderEliminar
  4. BTW, después voy a hacer un post de AMBER :D

    ResponderEliminar