¿Qué receta de JavaScript es adecuada para usted?

 

 

 

  • Anuncie en la revista Smashing
  • Smart Interface Design Checklists

  • Índice
    1. JavaScript mejora constantemente
    2. Kit de herramientas web de Google (GWT)
    3. CaféScript
    4. Herramientas de cierre de Google
    5. Dardo
    6. papá
    7. ¿Qué tengo que hacer?
      1. Otras lecturas

    JavaScript ha sido llamado de todo, desde excelente hasta terrible, hasta el lenguaje ensamblador de la Web, pero todos lo usamos. Amas JavaScript o lo odias: todo el mundo admite que hay fallos graves y no hay muchas otras opciones.

     

    JavaScript ha sido llamado de todo, desde excelente hasta terrible, hasta el lenguaje ensamblador de la Web, pero todos lo usamos. Amas JavaScript o lo odias: todo el mundo admite que hay fallos graves y no hay muchas otras opciones.

    Comencemos con algunos aspectos negativos fundamentales. JavaScript no tiene una buena respuesta para algunas características realmente básicas de los lenguajes de programación modernos: variables y funciones privadas, paquetes y módulos, mecanismos de localización estándar, finalización de código en editores.

    Si bien a JavaScript le faltan muchas características, es la naturaleza muy dinámica del lenguaje lo que asusta a tantos creyentes en la programación estática. Todo esto es JavaScript válido:

    obj1 = { func1: function() { return "I'm function 1"; }};obj1['func2'] = function() { return "I'm function 2";};obj1['fu' + 'nc' + 3] = function() { return "I'm function 3";}var f = 'func4';obj1[f] = function() { return "I'm function 4";}alert(obj1.func2());alert(obj1.func3());alert(obj1.func4());

    La mayoría de los lenguajes admiten la carga dinámica de código , pero JavaScript lo fomenta. JavaScript tiene muchos rincones oscuros. ¿Sabías que agregar dos matrices en JavaScript da como resultado una cadena vacía, o eso da como [] + {}resultado la cadena [object Object]pero {} + []es 0? ¡¿ Qué ?!?

     

    JavaScript hace que sea tan fácil escribir código ilegible que es imposible escribir proyectos grandes en JavaScript... excepto Twitter, Facebook, Google, todos los sitios web importantes de los que haya oído hablar y cientos de otros.

    Estas deficiencias me causan problemas todos los días, pero todavía amo JavaScript. Es divertido codificar y está lejos del lenguaje ensamblador de la Web. El montaje es casi imposible de escribir a mano y aún más difícil de leer:

    C005 B7 80 04 STA A ACIAC008 86 11 LDA AC00A B7 80 04 STA A ACIA

    JavaScript es fácil de escribir. Si tengo un botón y quiero saber cuándo alguien hace clic en él, podría importar una biblioteca como jQuery y escribir una clickfunción:

    $('#myButton').click(function() { alert('I was clicked');});

    Tu abuela puede adivinar qué hace este código. Es por eso que JavaScript es un buen primer lenguaje de programación y un excelente lenguaje de creación de prototipos. Los programas JavaScript pasan de una página en blanco a una aplicación funcional ridículamente rápido. Son rápidos de escribir, no requieren un compilador y le permiten hacer todo lo que necesite.

    Estas dos visiones de JavaScript son difíciles de conciliar. ¿Es JavaScript un lenguaje suelto mal definido diseñado para provocar canas prematuras o un lugar divertido para trabajar? La respuesta es ambas.

    Nos enfrentamos a esta elección con cada nuevo proyecto web. ¿Deberíamos escribir JavaScript u otro lenguaje que lo genere? Este artículo le muestra cómo elegir.

    JavaScript mejora constantemente

    JavaScript es el lenguaje de programación del lado del cliente más popular del mundo. Es difícil encontrar un sitio web que no lo ejecute. También ha avanzado mucho con la introducción de excelentes bibliotecas como jQuery , Backbone y muchas otras. JavaScript gana fácilmente para proyectos pequeños, pero falla cuando los proyectos y equipos crecen.

    Todo proyecto grande de JavaScript adopta convenciones para compensar la falta de funciones del lenguaje. Son patrones simples como usar un guión bajo para marcar algunas funciones como privadas o agregar comentarios antes de los argumentos para indicar el tipo esperado.

    function formatDate(/* Date */ d) { var day = d.getDate(); var month = d.getMonth() + 1; var year = d.getFullYear(); return date + "-" + month + "-" + year;}

    Estos comentarios ayudan, pero no hay nada que le impida pasar una cadena, un número o cualquier otra cosa a la formatDatefunción. No puedes hacer cumplir una convención de codificación y nunca sabrás que no funciona hasta que el código realmente se ejecute en tu entorno de producción y falle. La verificación de tipos adicional instanceOfhace que el programa falle con un mejor mensaje de error, pero aún falla en tiempo de ejecución en lugar de ser detectado por el compilador.

    Herramientas como JSLint o JSHint encuentran problemas de sintaxis comunes, como usar ==cuando debería haber usado ===, pero no abordan los problemas más importantes. Bibliotecas como RequireJS brindan cierto soporte para módulos en JavaScript, pero eso sigue siendo solo una convención. Sin nada que imponga estos patrones, pasarás horas interminables rastreando errores molestos. Nunca es divertido depurar el JavaScript de otra persona.

     

    A los programadores les encanta encontrar nuevas soluciones a problemas existentes, pero no existen muchas buenas alternativas a JavaScript.

    Kit de herramientas web de Google (GWT)

    Google hizo el primer gran esfuerzo para reemplazar JavaScript con GWT . La idea era escribir código Java y compilarlo en JavaScript. Java proporciona muchas de las características del lenguaje que le faltan a JavaScript y el compilador permite realizar muchas comprobaciones antes de ejecutar el código. Con un buen depurador y una biblioteca de interfaz de usuario agregada, parecía que GWT se apoderaría del mundo.

    No fue así.

    GWT no ha fracasado (todavía), pero tampoco ha tenido éxito. Java es un lenguaje difícil de escribir. Tiene mucha complejidad y requiere un conocimiento profundo de la programación orientada a objetos.

    La mayor parte de la complejidad de Java proviene de los difíciles problemas que resuelve. Eso sería bueno si tuvieras esos problemas, pero sería excesivo si no los tuvieras.

    GWT agregó la complejidad de la Web además de Java. También se posicionó como una forma de escribir código para la Web sin necesidad de preocuparse por los navegadores o HTML. Produjo interfaces que parecían torpes y funcionaban lentamente. También condujo a algunos antipatrones malos .

    Es posible escribir buenas aplicaciones en GWT , pero requiere mucho trabajo.

    Aún más preocupantes son los claros indicios de que GWT no es el futuro. Google todavía lo mantiene, pero la comunidad está disminuyendo y sus sueños de dominar el mundo hace tiempo que se acabaron. Incluso Google nunca usó GWT. Todos sus productos principales (Búsqueda, Gmail, Maps, Calendar, Docs, Google+) están escritos en JavaScript. Bueno... algo así como JavaScript, pero llegaremos a eso un poco más adelante.

    Todavía uso GWT profesionalmente, pero lo cuestiono con cada nuevo proyecto. GWT intentó cambiar drásticamente el ecosistema de JavaScript y es difícil convertir un portaaviones en un abrir y cerrar de ojos.

    CaféScript

    El equipo de CoffeeScript no redefinió JavaScript, simplemente le dio un lavado de cara. CoffeeScript agregó una nueva sintaxis para mejorar algunas de las dificultades cotidianas de la programación JavaScript sin cambiar drásticamente el lenguaje.

    En lugar de esto:

    $(document).ready(function() { alert('Hello World!');});

    CoffeeScript te permite escribir esto:

    $(document).ready - alert 'Hello World!';

    La filosofía general es que escribir menos código significa tener menos errores. CoffeeScript simplifica la sintaxis de JavaScript al eliminar la necesidad de declarar vary utilizar sangría de espacios en blanco en lugar de llaves.

    CoffeeScript está creciendo rápidamente, es amado por los programadores de Ruby y odiado por cualquiera que esté secretamente enamorado de las llaves. CoffeeScript se compila en JavaScript cuando se ejecuta la página o antes de tiempo durante un paso de compilación.

    CoffeeScript realiza muchas mejoras sintácticas con respecto a JavaScript, pero tiene dos defectos principales. La primera es que no puedes depurar directamente en CoffeeScript. Los navegadores no ejecutan CoffeeScript de forma nativa, por lo que obtienes todos los errores en JavaScript compilado y tienes que traducirlos nuevamente a tu código fuente. Eso significa que no puedes escribir una aplicación CoffeeScript sin un conocimiento bastante profundo del JavaScript que producirá.

     

    El segundo defecto importante de CoffeeScript es que básicamente es sólo JavaScript con una sintaxis diferente. CoffeeScript significa escribir menos código, pero no soluciona los problemas reales de JavaScript como lenguaje. Sigue siendo cierto que amo mi CoffeeScript y odio el de los demás.

    Herramientas de cierre de Google

    Casi al mismo tiempo que salió CoffeeScript, Google hizo otro esfuerzo para mejorar JavaScript con las herramientas de cierre de Google . Google intentó hacer de GWT la próxima tecnología web dominante, pero dejó que Closure se escapara silenciosamente.

    El cierre incluye un mecanismo de plantillas y una biblioteca de widgets, pero las partes más interesantes son el compilador de cierre y el Linter de cierre . Giantess Videos and comics

    El compilador de cierre (como YUI Compressor ) toma su JavaScript y lo comprime para que tarde menos tiempo en descargarse y se ejecute más rápido en producción. La idea general es desarrollar en JavaScript estándar y compilarlo para su lanzamiento.

    El compilador de cierre convierte esto:

    function sayHello() { alert('Hello World!');}$(document).ready(function() { sayHello();});

    dentro de esto:

    $(document).ea(function(){alert("Hello World!")});

    El resultado es difícil de leer, pero se ejecuta mucho más rápido.

    El compilador de Cierre admite dos modos principales: simple y avanzado. El modo simple toma cualquier JavaScript y lo comprime eliminando comentarios y espacios en blanco, sustituyendo nombres de variables y realizando otros cambios seguros. El modo simple tiene muy pocas posibilidades de dañar su JavaScript y puede encontrar algunos problemas cuando se compila.

    El modo avanzado proporciona una compresión mucho mejor, pero hay muchas posibilidades de que rompa su código a menos que planifique con anticipación. Avanzado requiere información adicional para indicarle al compilador qué no eliminar. La naturaleza muy dinámica de JavaScript dificulta que el compilador siga cada ruta en su árbol de código sin ayuda.

    Las herramientas de cierre también introducen etiquetas JSDoc , que le brindan al compilador más información sobre cómo funciona su código. En JavaScript normal, puedes definir un objeto con tres estados para tu aplicación:

    myProject.threeStates = { TRUE: 1, FALSE: -1, MAYBE: 0};

    Usted sabe que este es un tipo enumerado que restringe un valor a una de estas tres opciones, pero el compilador no lo sabe. Tampoco ese otro desarrollador de su equipo que agregó un cuarto valor de forma dinámica. JSDoc te permite especificar cómo funciona este código:

    /** * Enum for my three states. * @enum {number} */myProject.threeStates = { TRUE: 1, FALSE: -1, MAYBE: 0};

    Al agregar este comentario, deja en claro que se trata de una enumeración, que solo contiene números y que la está definiendo como un tipo seguro que puede usar en otros lugares. Combine esta característica con el linter de cierre que lo obliga a escribir comentarios como este y básicamente estará redefiniendo JavaScript. Todavía se parece a JavaScript, pero se convirtió en un lenguaje fuertemente tipado.

     

    Eso es fácil de ver con la @typeanotación:

    /** * The name of the user * @type {string} */var name = 'Zack';

    JSDoc admite otras anotaciones que controlan todo, desde lo que devuelve una función hasta quién puede llamarla. Agregue un cargador de módulos y la biblioteca de cierre soluciona muchas de las deficiencias de JavaScript convirtiéndolo en Java.

    El código de cierre se parece a Java con una sintaxis más torpe. Está fuertemente tipado, utiliza un mecanismo de empaquetado similar y tiene un compilador potente. Eso es algo bueno y malo en todos los sentidos en que Java es bueno y malo.

    Google no está poniendo mucho marketing detrás de las herramientas de cierre, pero sí mucha ingeniería. Todos los principales productos de Google utilizan Cierre. Google+ se creó sobre la base de Closing desde cero.

    La comunidad de Close está creciendo, pero todavía no hay mucha gente fuera de Google que la conozca bien. El cierre también adolece de la necesidad de mantener la compatibilidad con versiones anteriores de JavaScript. La sintaxis parece torpe y sólo los programadores más avanzados de JavaScript y orientados a objetos pueden escribirla.

    Algunas personas pensaron que la Web necesitaba un lenguaje completamente nuevo. Entonces Google continuó su relación enemiga con JavaScript al crear Dart.

    Dardo

    Dart reemplaza totalmente JavaScript con un lenguaje fuertemente tipado, utiliza interfaces y se parece mucho a un Java simplificado.

    library hi;import 'dart:html';main() { query('#status').text = 'Hi, Dart';}

    Este simple "¡Hola mundo!" El ejemplo muestra paquetes, importaciones y métodos similares a la sintaxis de Java.

    Dart puede compilarse en JavaScript, pero ejecutarlo de forma nativa en el navegador mejora el rendimiento y la depuración. Google controla el navegador Chrome y puede agregar allí soporte nativo para Dart. Ya tienen una versión especial ejecutándose en Windows . Pero no todo depende de Google.

    Chrome depende de WebKit , que también impulsa Safari de Apple. Webkit es un proyecto de código abierto formado por aproximadamente un tercio de personas de Google, un tercio de personas de Apple y un tercio de otras personas. Al equipo de Chrome le gustaría cambiar Webkit para que sea compatible con Dart; eso les facilitaría la vida y también haría que Safari fuera compatible con Dart. Si eso sucediera, podrían afirmar que dos navegadores importantes lo admiten y presionar a los demás para que comiencen. El equipo de Safari no quiere que la Web se ejecute en un nuevo lenguaje propiedad de Google, por lo que se muestran firmes en no incluir Dart.

    Parece que ninguno de los otros navegadores tampoco será compatible con Dart. Eso te deja compilando Dart en JavaScript y perdiendo algunas de las características más interesantes, como los depuradores integrados.

    Dart tiene muchos méritos técnicos; está eclipsado por problemas políticos mayores.

    Algunos empleados de Google muy inteligentes trabajan en Dart y tiene algunas características interesantes, pero sigue siendo una invención de Google y no es estándar. No fue desarrollado por una comunidad y existen buenas razones para que otros proveedores desconfíen de él.

     

    Lo único seguro sobre Dart es que se desconoce su futuro. Recientemente se lanzó una vista previa (versión 0.1), pero en realidad no se puede utilizar fuera de Google. Dart es un lenguaje a tener en cuenta, pero aún no es una opción real.

    papá

    Opa es el nuevo chico de la cuadra con un lanzamiento 1.0 en agosto pasado. Es un lenguaje fuertemente tipado con una comunidad en crecimiento. Escribe Opa y lo compila en otros lenguajes como JavaScript, pero no es solo del lado del cliente. Opa combina programación del lado del cliente y del lado del servidor en un solo archivo.

    Opa soporta el desarrollo de clientes, servidores y bases de datos con un único lenguaje. Utilizando la misma base de código, se compila en JavaScript, ejecutables nativos y código SQL. Recientemente también agregaron soporte para bases de datos no relacionales como MongoDB .

    A diferencia de Dart, Opa se basa en gran medida en lenguajes de programación funcionales como Erlang . Eso lo hace atractivo para los nerds, pero el listón de entrada es bastante alto. Opa carece de la sintaxis simple de CoffeeScript y realmente no puedes aprender Opa por tu cuenta sin una sólida experiencia en otros lenguajes de programación.

    Aunque el listón es alto, Opa recompensa su inversión en aprendizaje brindándole un entorno único en el que no tiene que cambiar de idioma entre el cliente y el servidor. No ha crecido mucho más allá de muestras y pequeños sitios web, pero está ganando terreno.

    ¿Qué tengo que hacer?

    El problema de JavaScript es problema de todos; No hay buenas respuestas. Es posible escribir un buen JavaScript que se adapte a proyectos grandes, pero eso requiere atención constante y la cultura adecuada.

    Hay algunas otras opciones para generar JavaScript (por ejemplo, Clojure se compila en JavaScript), pero siguen siendo proyectos pequeños sin mucho uso en el mundo real.

    Google escribe la mayor parte de su código del lado del cliente con las herramientas de cierre y están empezando a adoptar más Dart. Otros sitios web grandes como Twitter utilizan JavaScript combinado con otras tecnologías como Ruby On Rails. Los grandes proyectos de código abierto como WordPress se ciñen principalmente a JavaScript y jQuery. Facebook utiliza una combinación de todos ellos. Microsoft combina jQuery con .Net y algunas otras tecnologías del lado del servidor que interactúan con JavaScript. También lanzaron una nueva variante de JavaScript de tipo estático llamada TypeScript .

    Eso sólo roza la superficie. El proyecto CoffeeScript mantiene una lista completa de lenguajes que se compilan en JavaScript .

    Si su proyecto es pequeño, simplemente escriba JavaScript. jQuery está muy bien hecho; al igual que muchas otras bibliotecas de JavaScript. Mantenga su proyecto pequeño y los problemas seguirán siendo pequeños.

    Pero la línea entre lo pequeño y lo grande es borrosa. Los proyectos pequeños crecen con el tiempo y usted puede meterse en grandes problemas al escribir aplicaciones JavaScript grandes sin muchos procesos que lo mantengan alejado de las partes malas . Las otras opciones son las que ya han sido o las que aún no lo son.

    Gran parte de este problema es la dificultad de encontrar un idioma único que mantenga contentos a todos. Los sitios web pequeños quieren algo simple que facilite comenzar y producir una aplicación rápidamente. Los proyectos grandes quieren que la estructura mantenga la base del código mantenible durante años. Los dos objetivos están en desacuerdo y ningún lenguaje ha satisfecho jamás a ambas partes. Por eso Visual Basic y C++ son tan populares.

    Tampoco hay razón para elegir sólo uno. GWT se combina bien con JavaScript normal y puede utilizar las optimizaciones simples del compilador de cierre con cualquier proyecto de JavaScript.

    JavaScript nunca será el mejor lenguaje para todas las aplicaciones, pero los navegadores no admitirán otro en el corto plazo. La clave para utilizar bien JavaScript es comprender sus limitaciones y saber cuándo no utilizarlo. JavaScript es fácil para proyectos pequeños; necesitas planificación, cuidado y ayuda de otras bibliotecas para trabajar en bibliotecas más grandes.

    Imagen de portada creada por Ruiwen Chua .

    Otras lecturas

    • Terribles errores de JavaScript que se deben evitar con un analizador de código estático
    • Una introducción a JavaScript de pila completa
    • ESLint: el Linter JavaScript de próxima generación
    • Por qué es importante el estilo de codificación

    (cp, señor)Explora más en

    • Codificación
    • javascript





    Tal vez te puede interesar:

    1. ¿Deberían abrirse los enlaces en ventanas nuevas?
    2. 24 excelentes tutoriales de AJAX
    3. 70 técnicas nuevas y útiles de AJAX y JavaScript
    4. Más de 45 excelentes recursos y repositorios de fragmentos de código

    ¿Qué receta de JavaScript es adecuada para usted?

    ¿Qué receta de JavaScript es adecuada para usted?

    Anuncie en la revista Smashing Smart Interface Design Checklists Índice JavaScript mejora constantemente

    programar

    es

    https://pseint.es/static/images/programar-que-receta-de-javascript-es-adecuada-para-ustedja-810-0.jpg

    2024-04-04

     

    ¿Qué receta de JavaScript es adecuada para usted?
    ¿Qué receta de JavaScript es adecuada para usted?

    Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente

     

     

    Top 20