Cuando hablamos de lenguajes de programación que nos permiten crear aplicaciones cliente (como pueden ser las aplicaciones web, aplicaciones desktop, o aplicaciones móviles) para distintas plataformas y que tengan una sintaxis sencilla, por lo general se piensa en lenguajes como Python que permiten crear aplicacione de escritorio multiplataforma, o Javascript para crear aplicaciones web; o lenguajes como Kotlin para crear apps moviles para Android y iOS.
Pero muy a parte de estos lenguajes de programación, hay uno que fue pensado justamente para que con una sola base de código, todos estos tipos de aplicaciones fueran generadors. Este lenguaje es Dart y en este articulo me gustaría comentarles porque puede ser una buena opcion aprender un poco más de este lenguaje actualmente.
Pero primero para los que lo conocen, veamos que es Dart.
¿Qué es Dart?
Tecnicamente hablando, Dart es un lenguaje de programacion compilado, lo que quiere decir que cuando termines de desarrollar, tu codigo necesita se procesado por un compilador para generar la aplicacion final.
Y lo genial del compilador de Dart es que te permite hacerlo a multiples arquitecturas como:
- Arm64 para que se puedas crear aplicaciones moviles (Android, iOS)
- x86/64 para crear aplicaciones desktop multiplataforma (Windows, Linux, Mac) o aplicaciones de servidor (Backend)
- Transpilar codigo de Dart a Javascript para que puedas crear aplicaciones para el navegador o aplicaciones web (Dart2JS)
E incluso puedes compilar el código de Dart para que funcione en Sistemas embebidos. La empresa automovilistica Toyota por ejemplo, esta usando Dart para sistemas embebidos para multiples proyectos interenos
Todo es posible porque Dart es un lenguaje de proposito general, es decir que sirve para hacer practicamente de todo, al mismo estilo que lo que ofrece el ecosistema de lenguajes como Javascript, solo que Dart pose un mejor diseño del lenguaje, y puede llegar a ser más rapido gracias a sus multiples formas de compilar.
Y no solo el ecosistema se parece, sino que Dart al igual que Javascript tambien tienen sintaxis del lenguaje similar y soporte a los mismos paradigmas de código como la Orientacion a Objetos y a programacion funcional. De hecho su Framework Flutter tambien esta inspirado en algunos conceptos de React, como los Widgets que son practicamente los componentes de los framewoks de Frontend de Javascript.
Breve Hitoria de Dart
Ahora, todo esto es porque, alrededor del año 2011, Google intento crear un lenguaje strong typing o tipado fuerte (es decir que posea tipos de datos) que se ejecutara nativamente en los navegadores integrando una maquina virtual en su navegador de Google Chrome, llamado Dart VM.
La idea principal era que lo desarrolladores tuvieran una nuevo lenguaje con caracteristicas modernas, que fuera compilado y que permitiria interactuar con el DOM para poder crear aplicaciones. Y como ya sabes, este es el prosposito de Javascript en el navegador, asi que todo esto era para tener una alternativa más moderna a Javascript por entonces.
Google pensaba que si los desarrolladores tuvieran dos lenguajes en el navegador para crear apps, escogerian el más moderno para poder crear aplicaciones, y Javascript pasaria a segundo plano. Por supuesto esto no paso, debido al ecosistema pequeño de paquetes del lenguaje en comparacion a Javascript, y a que necesitabas reescribir tu código de Javascript a Dart.
Y a pesar que la maquina virtual de Dart si fue integrada en algunas versiones de prueba de Google chrome, Google dejo de lado su idea de reemplazar a Javascript con Dart, alla por el año 2015 y se conformo con que Dart simplemente Transpile codigo, es decir que tu código de Dart pueda ser convertido a código de Javascript.
De hecho si vemos actualmente al lenguaje que tomo este lugar que queria Dart, estariamos hablando de Typescript de Microsoft, debido a que este no necesita que reescribas el codigo de Javascript, al ser un lenguaje que esta basado en este lenguaje.
Todo esto hizo que Dart durante muchos años no fuera de los lenguajes más queridos, principalmente porque no habia mucho que se pudiera hacer con el, incluso muchos que llegaron a saber de su existencia, creian que ya era un lenguaje muerto. Aunque todo esto cambiaría con la llegada de Flutter.
Dart y Flutter
Porque Desde que Google anuncio Flutter, por el año 2017, este Framework de Dart desde entonces no ha hecho más que ganar popularidad, siendo de las mejores opciones para crear aplicaciones multiplataforma, y digo aplicaciones en general y no solo apliaciones moviles. Porque con Flutter estos dias puedes crear usando una sola base de codigo aplicaciones moviles para Android y iOS, aplicaciones web frontend, aplicaciones web backend, y aplicaciones de escritorio; lo que lo convierte en uno de los lenguajes más versatiles y practicos para crear aplicaciones cliente para distintos sistemas.
Asi que cuando se habla de Dart, es inevitable hablar de Flutter, principalmente porque este es el Framework más importante del Lenguaje, incluso la mayoria de desrrolladores no conoce a Flutter por Dart, sino al contrario conoce a Dart debido a Flutter.
Ecosistema de Dart
Pero Dart no es solo Flutter asi que tambien podemos encontrar una serie de herramientas de software, framewoks, bibliotecas actualmente que permiten hacer mucho más con el lenguaje.
Todos estos paqutes se pueden encontrar en pub.dev y entre los que podemos encontrar a frameworks web Frontend desarrollados en Dart como:
- Angular Dart, el cual es la version del Framework Angular de Typescript, solo que escrito en Dart.
- OverReact que permite crear aplicaciones web frontend al mismo estilo de React solo que escritos en Dart.
- Vue Dart que es un paquete poco popular que permite crear apps frontend a la forma de escribir código de Vuejs
- Jasper una Frameworks para crear apliaciones frontend unidos a código de servidor para poder renderizar desde el backend, es decir un Framework de Server Side Rendering, en esencia similar a lo que ofrece Nextjs en el mundo de Javascript.
- DartBoard, un framework para crear aplicaciones web en tiempo real
Y por supuesto Flutter on the Web que es el mismo framework Flutter solo que para crear aplicaciones web, de hecho lo interesante es que puedes usar el mismo conjunto de widgets de las aplicaicones moviles y crear apps que son visualmente atractivas.
Luego tambien tenemos a los Frameworks de Dart del Backend:
- Angel
- Dartion
- dhttp
- Dart Frog
- json server
- shelf, el cual es un framework Backend basado en middlewares, al estilo de expressjs en nodejs o flask en Python
Los cuales casi todos permiten crear aplicaciones de servidores y apis de REST e incluso GraphQL, de forma similar a frameworks como express en Nodejs o Flask en Python.
Aunque si lo tuyo es solo crear funciones serverless, tambien hay un paquete
- Dart Functions Framework que permite ejecutar funciones Severless en la nube de Google (Google Cloud a traves de Docker)
O tambien bibliotecas de Videojuegos
ademas de una enorme cantidad e bibliotecas que permiten desde:
- convertir codigo de javascript a dart
- Dart Code Metrics, medir el rendimiento de las aplicacioesn en Dart
- JSON to Dart, convierte codigo de json a dart
- o paquetes que permiten comunicar aplicaciones de dart a servicios Backend as a service como:
Estos ultimos tambien son importantes, porque si se crean aplicaciones cliente y necesitan comunicarse con backend se necesitan bibliotecas que faciliten la integracion con estos servicios, asi que es bueno ver que muchos de estos proyectos consideran a Dart tambien.
Conclusión
Como puedes ver el ecosistema de Dart es bastante amplio a pesar que es un lenguaje con un ecositema realtivamente nuevo, asi que si bien actualmente su uso e principalmente el desarrollo movil con frameworks como Flutter, creo que lo siguiente que veremos de este lenguaje es la creacion de aplicaciones desktop, y luego quizas la creacion de aplicaciones web tambien, aunque su desarrollo de momento se enfoca más en las aplicacione cliente. asi que si lo tuyo es usar servicios de la nube como firebae y supabase, y solo desarrollar aplicaciones cliente como web, moviles o desktop, creo que dart puede ser un lenguaje muy util.
Recursos
- Awesome Dart
- Flutter Gems, es un sitio que categoriza los paquetes del ecosistema de Flutter.
- Dart VM
Lista de frameworks desfasados: