¿Qué es Dart y por qué debería importarte?
() translation by (you can also view the original English article)
En este tutorial, te presentaré el nuevo lenguaje de programación web de Google, Dart, y te explicaré por qué debería gustarte y qué necesitas saber sobre él. Aprende sobre este nuevo lenguaje y hazte a algunas opiniones al respecto: ¿realmente reemplazará a JavaScript?
¿Qué es Dart?
Directamente de la boca del caballo (que se encuentra aquí):
Dart es un lenguaje de programación puramente orientado a objetos, de herencia única y basado en clases. Dart se escribe opcionalmente... y admite interfaces y genéricos 'refied'. Los programas Dart pueden comprobarse estáticamente. El verificador estático informará algunas violaciones de las reglas de tipo, pero tales violaciones no abortan la compilación o impedir la ejecución.
Si eso es una gran y humeante pila de palabrerías para ti, permíteme parafrasear lo anterior.
Basado en clases: Dart espera que uses clases. Si bien JavaScript está basado en clases, no se puede escribir en Dart sin clases de escritura.
Herencia única: Las clases pueden extender a otras clases, pero solo una a la vez. Ésta es una estructura común en la programación orientada a objetos. Unos pocos lenguajes admiten la herencia múltiple, pero el consenso general es que eso causa más problemas de los que resuelve, por lo que la mayoría de los lenguajes de programación orientada a objetos optan por la herencia única.
Lenguaje de programación orientado a objetos: Esta declaración es un poco redundante, dado el bit "basado en clases" de antes. Pero es significativo: Dart es OOP de principio a fin. De hecho, recuerda bastante a Java (no a JavaScript; Java), que también se basa en clases.
Opcionalmente tipado: La mayoría de los lenguajes son tipados o no. JavaScript, por ejemplo, no lo es. Cuando definas una variable, se anulará el tipo. Puedes configurarla de tipo String
, luego de tipo Number
, y nadie se quejará (bueno, yo lo haré). Además, puedes llamar a los métodos Array
en esa variable y no tendrás ningún problema hasta que ejecutes esa línea de código. Por el contrario, Java es tipado. Cada variable debe declararse con un tipo, como String
o int
. Y cuando se escribe una variable, no puedes ponerle un tipo de valor diferente. Y si intentaste llamar a un método que no existe en ese tipo, el compilador generará un error que te permitirá conocer tu error antes de ejecutar tu código. C y sus variantes son otros lenguajes tipados, mientras que Ruby y Python son otros lenguajes no tipados.
Opcionalmente tipado significa, como puedes adivinar ahora, que tienes la opción de declarar un tipo para las variables. Es tan simple como esto: puedes omitir el tipo y el compilador no realizará ninguna verificación adicional. Si proporcionas un tipo, el compilador te ayudará con los errores. ActionScript es un ejemplo de otro lenguaje con tipado opcional.
Este es un movimiento bastante inteligente, uno que probablemente esté destinado a ayudar a acelerar la adopción. Los programadores de Dart probablemente serán programadores de JavaScript que den el salto. Brindar soporte para un lenguaje sin tipado brinda a los JavaScripters una curva de aprendizaje más fácil, al tiempo que proporciona una característica que muchos programadores insisten en que es esencial para la programación seria, que se puede aprender más adelante.
Genéricos reificados: Los genéricos son una característica del lenguaje que te permite escribir los elementos de una colección. Por ejemplo, una matriz en JavaScript no puede garantizar que los objetos que contiene sean de un tipo específico (aparte del hecho de que JavaScript no es un lenguaje tipado). Sin embargo, los genéricos te permiten especificar que todos los elementos de una matriz, o cualquier otro tipo de colección, deben ser de un tipo determinado, tal vez una cadena (String
). Por lo tanto, si intentas insertar un número en la matriz, puedes recibir advertencias. Los genéricos 'reified' dan un paso más y permiten que este tipo de seguridad pase el compilador. Se conserva la integridad del tipo en tiempo de ejecución.
Interfaces: Una interfaz es una técnica orientada a objetos. Define un tipo sin definir la funcionalidad. Sus usos son difíciles de resumir en una oración o diez, basta con decir que son parte integral de las técnicas avanzadas (y limpias) de programación orientada a objetos (es decir, patrones de diseño). Una vez que asimiles las interfaces, lamentarás la falta de ellas en otros lenguajes.
Comprobado estáticamente: Esto vuelve a la cosa del tipado. Cuando se usa el tipado, una variable con un tipo se considera "estáticamente escrita" y, como tal, el tipo no se puede cambiar una vez que se ha declarado. Esto permite al compilador (o "verificador estático") hacer suposiciones sobre tus intenciones con tu código; es decir, si declaras una variable como String
, no deberías intentar llamar a changeTimeZone
en ella. Si lo hiciste (tal vez escribiste lo que pensaste que era esa variable que contiene el objeto Date
), entonces el compilador puede alertarte sobre el error sin tener que ejecutar el código.
Entonces, ¿qué es Dart realmente?
Sí, tuve que dar la explicación "oficial" de Dart. Pero eso puede satisfacerte o no. Esto es lo que es Dart, para el desarrollador web típico en mente.
Dart es el reemplazo de Google para JavaScript. Se anunció en octubre de 2011 y la intención general es proporcionar las mismas herramientas que JavaScript, sólo como herramientas potentes. Como se explicó en el paso anterior, tiene muchas características orientadas a objetos con las que el programador típico de JavaScript no estará familiarizado. Pero la mayoría de los programadores que están familiarizados con estas características las defenderán fácilmente como esenciales para un desarrollo serio.
En resumen, Google siente que JavaScript no está preparado para la tarea de ser un lenguaje de programación "real", dada la cantidad de trabajo pesado que ha estado haciendo desde que el iPhone abrió un agujero en el zepelín de Flash.
La esperanza de Google es que Dart sea compatible de forma nativa con todos los principales navegadores a largo plazo. Obviamente, eso no está sucediendo en este momento, dado que Dart todavía está en modo de lanzamiento temprano, y no podemos esperar que Apple, Microsoft o Mozilla se unan todavía. Sin embargo, lo que hace que Dart valga la pena ver ahora es que Google ha proporcionado un compilador para convertir el código de Dart en JavaScript normal.
Personalmente, esto es algo que he estado anhelando desde que me pasé a JavaScript, proveniente de ActionScript. Di lo que quieras sobre Flash (y ten la seguridad de que probablemente también lo he dicho), pero ActionScript 3 es un buen lenguaje. Se ha demostrado que pasar de AS3 avanzado a JavaScript provoca palabrotas. De hecho, he estado jugando con mi propio compilador de JavaScript (no llegué muy lejos y estoy bastante feliz de abandonar el proyecto), y quería algo que al menos me permitiera desarrollar con algunas sutilezas, como clases, interfaces y tipos reales, incluso si se compiló en JavaScript prototípico sin tipado. El proceso de compilación puede detectar algunos errores antes de ejecutar el proyecto, lo que supone un gran ahorro de tiempo.
Por lo tanto, ya sea que Google se salga con la suya o no, ciertamente es posible escribir proyectos de Dart para la web hoy, y lo haremos al final de este tutorial. Con suerte, en el camino, te convenceré de que Dart es bastante prometedor.
¿Qué es lo malo de Dart?
Ya que estás entusiasmado con "JavaScript 2.0", ahora la dura verdad. Solo Google tiene planes de incorporar soporte para Dart en su navegador. Nadie más ha expresado interés en eso. De hecho, se han hecho bastantes declaraciones en contra de Dart, o al menos la idea de dar soporte a Dart de forma nativa, por parte de los propios fabricantes de navegadores.
Y aunque los proyectos de Dart se pueden compilar en JavaScript, necesariamente hay algo de sobrecarga en este proceso. El compilador de Dart no se parece mucho al compilador de CoffeeScript, que es más un proceso uno a uno. Dart es su propio lenguaje, con bibliotecas y demás, y al compilar en JavaScript, en consecuencia, compila código de biblioteca adicional en el JavaScript resultante. Actualmente pesa más que una biblioteca como jQuery. Esto está destinado a cambiar a medida que el equipo de Dart perfecciona la compilación, pero básicamente es una biblioteca jQuery-ish que se requiere para normalizar las diferencias del navegador, y también un poco de "azúcar" adicional para ayudar a que JavaScript sea un poco más honesto sobre su naturaleza dinámica. Este tipo de peso adicional no es terrible, pero si estás creando un widget de interfaz de usuario simple para un sitio móvil, tal vez Dart no sea la mejor opción. Brillará más con aplicaciones web a gran escala que dependen significativamente de JavaScript.
Por último, Dart se encuentra actualmente en desarrollo. Eso es emocionante, y no es algo "malo" con Dart de por sí, pero si comienzas a desarrollar en Dart ahora, existe una cierta posibilidad de que la API cambie, o que las cosas no se documenten completa o correctamente, y la cantidad de la información en la web es menor que, digamos, la cantidad que puedes encontrar sobre jQuery. Es vanguardista, y puede que no sea para ti o para un proyecto determinado.
¿Qué tiene de asombroso Dart?
Al mismo tiempo, es de vanguardia y eso es increíble. Invertir un poco de tiempo ahora para aprender Dart podría ponerte en un buen lugar una vez que Dart sea más estable. Si te involucras ahora, incluso tienes la oportunidad de ayudar a dar forma al lenguaje. La lista de correo de Dart en grupos de Google a menudo tiene algunos intercambios entre las personas que sugieren ideas y los ingenieros de Google que responden a esa idea. A menudo se consideran las ideas aportadas por los usuarios y no es raro verlas incorporadas.
Ya he hablado de las ventajas de un lenguaje tipado y orientado a objetos, y probablemente no hace falta decir que esos rasgos también son impresionantes.
Dart también recuerda bastante a Java, y eso debería ser increíble si eres más un programador de Java (o C) que busca dedicarse al desarrollo web. Dart debería proporcionar una mejor transición a ese mundo que JavaScript.
Por último, Dart no se trata solo de un competidor de JavaScript. Es un lenguaje completamente nuevo y está listo para ejecutarse en cualquier lugar. Se utiliza en el lado del servidor, con Node.js, y promete ser otra herramienta generalizada, como Ruby o Python.
¿Debería importarte?
Esta es, por supuesto, una pregunta complicada, y estarías invitando a una inquisición basada en comentarios sin importar cómo responda. Pero responderé que lo haré.
Probablemente ya estés interesado, o quizás no, dependiendo de cuánto te molesten los problemas de Dart o cuánto te emocionen las ventajas de Dart. Los dos pasos anteriores te brindan mucha información que te llevará a tu propia conclusión.
Si eres el tipo de persona cuya idea de que programar en JavaScript es buscar en la web complementos de jQuery e instalarlos en tu página HTML, entonces Dart probablemente no te ofrecerá mucha emoción. Siéntete libre de que no te genere interés. Y permíteme ahorrarte un montón de tiempo y revelarte que baso el resto de este tutorial en la suposición de que te genera interés, al menos lo suficiente como para explorar.
Sin embargo, si eres el tipo de desarrollador de aplicaciones front-end que realmente cree en JavaScript orientado a objetos, trata de detectar errores en tus scripts y tiendes a escribir más JavaScript que HTML, entonces puedes ser alguien que se preocupa por la buena programación, sin importar el idioma o la plataforma, en cuyo caso puede que a ti te importe Dart. Al menos te lo debes a ti mismo para probarlo.
En mi opinión, Dart es muy prometedor y tiene un lugar en la programación web. Pero no creo que vaya a reemplazar o incluso realmente compensar el dominio de JavaScript sobre las secuencias de comandos en páginas HTML. Creo que encontrará un lugar con las aplicaciones web más serias, pero a menos que los fabricantes de navegadores (que no sean Google) acuerden compilar Dart en una máquina virtual, lo cual no creo probable, el destino de Dart está relegado a los experimentos de Chrome y las aplicaciones web a gran escala. Las tareas de creación de scripts simples, como una pizca de interactividad en una página web que sea estática, no se beneficiarán mucho de Dart.
Habiendo dicho eso, siento que siempre vale la pena aprender sobre cosas nuevas. Puedes aprender que lo nuevo no vale tu tiempo, pero debes formular esa opinión por tu cuenta, a través de la experiencia. Proporcionaremos algo de experiencia en este tutorial, así que si te sientes aventurero, prepárate para Dart.
Conclusión
Espero que esta breve discusión sobre Dart haya despertado tu interés en este nuevo lenguaje que puede o no tomar la web por asalto. Si deseas probarlo, echa un vistazo a mi tutorial exclusivo de Facebook donde te ensuciarás las manos con un simple proyecto de Dart.
(Si no estás en Facebook, no te preocupes. El tutorial estará eventualmente en el sitio principal de Activetuts+, y mientras tanto, tenemos mucho más contenido de Dart para ti).
¡Gracias por leer! Comparte tus opiniones sobre Dart en los comentarios.