JavaScript no obstructivo
JavaScript discreto es un paradigma floreciente en el lenguaje de programación JavaScript, utilizado en la Web. Aunque el término no se define formalmente, sus principios se generalmente incluyen:
- Separación de la funcionalidad del JavaScript (la "capa del comportamiento") de las capas de la estructura/contenido y de presentación de un pagina
- Uso disciplinado de las mejores prácticas de evitar los problemas de la programación tradicional del JavaScript (tales como inconsistencias del navegador y carencia del escalabilidad)
- Degradación agraciada en los navegadores que no pueden expresar la capa del comportamiento de la manera deseada
La necesidad de un nuevo paradigma
JavaScript ha tenido durante mucho tiempo la reputación de torpe, inadecuada para el desarrollo serio. Esto ha sido en gran parte debido a las implementaciones contrarias del lenguage y del DOM en varios navegadores, y al uso extenso de código "pegado" lleno de errores por parte de los aficionados. Los errores en tiempo de ejecución eran tan comunes (y tan difíciles de eliminar) que pocos programadores intentaban corregirlos, mientras se comportara mas o menos de la manera deseada; a veces incluso fallaban totalmente.
La aparición reciente de navegadores estandardizados, frameworks para JavaScript tales como Prototype, y las primeras herramientas de depuración de alta calidad han hecho posible el código organizado y escalable en JavaScript, y la aparición de AJAX lo ha hecho esencial. Mientras que el JavaScript era solo utilizado para las tareas relativamente simples y no críticas tales como validación de formularios y decoraciones llamativas, ahora se está utilizando para escribir los códigos grandes, complejos que son a menudo parte de la funcionalidad base de un sitio. Los errores en tiempo de ejecución y el comportamiento imprevisible son no más molestias de menor importancia; son errores fatales.
JavaScript discreto se puede considerar como parte del movimiento más grande de los estándares del Web; tanto como la demanda de compatibilidad de los navegadores han conducido al aumento de estandarización de código y estilo, la demanda creciente de aplicaciones ricas está levando este movimiento hacia métodos más robustos de JavaScript discreto.
Separando comportamiento y contenido
Tradicionalmente, la mayoría JavaScript se escribe en línea, como parte del contenido de un documento HTML. Por ejemplo, lo siguiente es una práctica típica de validación de formularios JavaScript:
<input type="text" name="fecha" onchange="validateDate (this);" />
Sin embargo, su propósito es describir la estructura de un documento, no su comportamiento programático. Combinar los dos afecta negativamente la capacidad de mantenimiento de un sitio por la misma razón que lo hace combinar el contenido y la presentación: si un sitio contiene centenares de estos campos de fecha, agregar la cualidad apropiada del onchange para cada uno (y modificándolos más adelante, en caso de necesidad) puede ser un trabajo dificil. Además, la sintaxis en linea impide la asignación de mas de un "manejador de evento" (event handler) para el evento onchange, lo que puede ser un problema si la aplicación crece.
La solución "discreta" es colocar a los manejadores de eventos necesarios pragmaticamente, en lugar de en línea. Esto es logrado comúnmente asignando una clase particular de la CSS a todos los elementos que necesiten utilizar el script:
<input type="text" name="fecha" class="campoFecha" />
El script puede entonces buscar todos los elementos con la clase campoFecha, y configurarlos:
//Asigna los manejadores de eventos para onchange
//Este script usa objetos y metodos propios de Prototype
camposFecha = document.getElementsByClassName("datefield");
for ( i=0; i<datefields.length; i++ ) {
Event.observe( campoFecha[i], "change", validateDate );
}
Dado que el propósito del atributo <date>class</date> es describir el rol semántico de un elemento esta aproximación es común en las practicas basadas en estándares web.
Mejorando las practicas
Aunque la esencia JavaScript discreto es el concepto de una capa separada del comportamiento, los seguidores del paradigma suscriben generalmente los principios relacionados, por ejemplo:
- La adherencia estricta al W3C DOM y modelo de evento, y evasión de extensiones especificas para un navegador.
- Las mejores prácticas de JavaScript son paralelas a menudo a otros lenguajes de programación, tales como el encapsulamiento y la abstracción, evasión de variables globales, convenciones de nombramiento significativas, uso de los patrones apropiados del diseño, y prueba sistemática. Tales principios son esenciales para el desarrollo de software en gran escala, pero no se han observado extensamente en JavaScript en el pasado; su adopción se considera como componente esencial de la transición de JavaScript de un lenguaje "juguete" a una herramienta para el desarrollo serio.
Vease también
Enlaces externos
- La capa de comportamiento: Usando JavaScript para el bien, no para mal (en inglés)
- JavaScript discreto (en inglés)
- A List Apart: Separando el comportamiento (en inglés)
- JavaScript discreto para Ruby on Rails (en inglés)
- Behaviour, una libreria que facilita el desarrollo de JavaScript discreto (en inglés)