martes, 26 de mayo de 2009

Javascript, Objetos Dinámicos, Closures, Funciones Lambda, Herencia Prototypal

Bueno despues de tanto tiempo recien logro hacerme un espacio para charlar sobre javascript nuevamente con ustedes. Hoy vamos a ver el porqué? de todos estos conceptos nuevos que vienen incluidos en javascript, y como poder utilizarlos en proyectos de la vida real. Por ejemplo, vamos a ver la diferencia entre: saber que es una función lambda o anonima, y utilizarlas para lograr un diseño de objeto avanzado.
Introducción
Primero lo primero, Javascript es un lenguaje dinámico orientado a objetos con soporte de funciones anonimas, y closures o cerraduras. Precisamente definir a javascript de esta manera genera tipicamente más confusión que no conocer las caracteristicas de javascript, entonces voy a intentar explicar una a una estas caracterisitas con ejemplos concretos y faciles de comprende, que resalten la esencia de cada caracteristica del lenguaje y nos permitan ver más allá sus posibilidades de utilización.
Caracteristicas
Mucho hemos oido hablar sobre las poderosas caracteristicas de javascript, por ejemplo del soporte de funciones labda y closures. Pero realmente cuales son las verdaderas caracteristicas de javascript?. Bueno a continuación podemos ver un listado no exaustivo de las caracteristicas principales de javascript.
  • Lenguaje dinámico: Se dice que Javascript es un lenguaje dinámico ya que poseé objetos dinamicos, estos son objetos que pueden variar su definición y comportamiento en tiempo de ejecución. Todos los objetos en javascript son dinámicos.
  • Closures: Las closures o cerraduras en javascript son una estructura del lenguaje que no poseé una sintaxis facil de explicar, pero que básicamente nos permite acceder a variables que fueron declaradas fuera de la función que estemos escribiendo, aún despues de que la funcion mayor hubiese terminado su ejecución.
  • Funciones lambda o anonimas: Javascript nos permite crear funciones sin nombre (anonimas) y poder asignarlas a una variable, ya que las funciones tambien son un objetos. Por esta razón podemos pasar funciones como parametros a otras funciones, e inclusive podes devolver funciones como resultado de una función.
  • Herencia Prototipal: la herencia prototipal es uno de los aspectos más discutidos de javascript, y se basa en el hecho de que cada objeto en javascript (y en javascript todo es un objeto) posee un prototipo, como miembro de si mismo. Por lo tanto, todo objeto(A) que se cree a partir de un objeto(B), heredará todos los miembros del prototipo de ese objeto(B). Finalemente si se solicita un miembro m sobre un objeto determinado y este objeto no poseé una definición de su miembro m, se le solicitará ese miembro m a su prototipo, el cual es común a todos los objetos de ese tipo.
Como podemos ver, citamos 4 caracteristicas de javascript, expusimos de manera precisa su definición pero no ayudamos a su comprensión, a continuación intentaré explicar en profundidad las nociones de programación dentro de cada una de ellas.