Introducción a Dart
Dart es un lenguaje de programación moderno desarrollado por Google, diseñado específicamente para construir aplicaciones de alto rendimiento y multiplataforma.
Este capítulo te presenta el origen de Dart, su filosofía de diseño y sus amplios casos de uso en frontend, móvil y servidor.

Historia y objetivos de diseño de Dart
Dart nació en 2011, con el objetivo inicial de reemplazar a JavaScript como el lenguaje de script nativo del navegador.
Aunque este objetivo no se logró, Dart tuvo un punto de inflexión clave en 2017: el lanzamiento del framework Flutter hizo que Dart volviera a entrar en el radar de los desarrolladores.
Los objetivos de diseño de Dart son muy claros:
| Objetivo de diseño | Descripción |
|---|---|
| Alto rendimiento | Compatibilidad con AOT (compilación anticipada) y JIT (compilación justo a tiempo), lo que permite un desarrollo rápido y la generación de código nativo. |
| Tipado fuerte | Compatibilidad con inferencia de tipos, equilibrando la seguridad de tipos y la eficiencia de desarrollo. |
| Multiplataforma | Un solo código puede compilarse a código máquina ARM, x64 o JavaScript. |
| Fácil de aprender | La sintaxis toma prestado de lenguajes populares como Java, JavaScript, C#, etc., lo que reduce el costo de aprendizaje. |
| Null safety | Mecanismo de Null Safety integrado, que evita las excepciones de puntero nulo a nivel de lenguaje. |
Dart 2.0 se publicó en 2018, marcando la madurez del lenguaje. Dart 3.0 se publicó en 2023, reforzando aún más el sistema de tipos y características como la coincidencia de patrones (pattern matching).
Casos de uso de Dart
Los casos de uso de Dart son muy amplios, cubriendo necesidades de desarrollo full-stack desde el móvil hasta el servidor.
Desarrollo móvil (Flutter)
Este es actualmente el caso de uso más central de Dart.
Con el framework Flutter, Dart puede crear aplicaciones nativas para las plataformas iOS y Android, ejecutando un solo código en ambas.
Desarrollo web
Dart puede compilarse a JavaScript para desarrollar aplicaciones de frontend web.
AngularDart es el framework Angular en la versión Dart, mantenido por Google, adecuado para grandes proyectos web.
Desarrollo de servidor
Mediante la biblioteca dart:io y frameworks como Shelf, Dart también puede escribir aplicaciones de servidor de alto rendimiento.
Internamente, Google tiene varios proyectos de servidor escritos en Dart.
Herramientas de línea de comandos
Dart puede compilarse en ejecutables independientes, muy adecuado para crear herramientas CLI multiplataforma.
| Caso de uso | Destino de compilación | Frameworks/Herramientas típicos |
|---|---|---|
| Móvil | Código máquina ARM | Flutter |
| Frontend web | JavaScript | AngularDart |
| Servidor | Código máquina / JIT | Shelf、Dart Frog |
| Línea de comandos | Código máquina | dart compile exe |
Comparación entre Dart y JavaScript
Tanto Dart como JavaScript son lenguajes orientados a objetos, pero Dart es más riguroso en el diseño del lenguaje.
A continuación, se comparan las diferencias desde varias dimensiones:
| Dimensión de comparación | Dart | JavaScript |
|---|---|---|
| Sistema de tipos | Tipado fuerte, admite inferencia de tipos | Tipado débil, tipos dinámicos |
| Null safety | Null Safety integrado | No (requiere TypeScript o verificación manual) |
| Función de entrada | Debe tener una función main() | El script se ejecuta directamente |
| Clases y herencia | OOP basado en clases, herencia única | Basado en cadenas de prototipos |
| Método de compilación | Doble modo AOT + JIT | Principalmente JIT |
| Modelo de concurrencia | Isolate (paso de mensajes) | Hilos Worker / bucle de eventos |
| Gestión de paquetes | pub.dev (repositorio oficial unificado) | npm (repositorio comunitario) |
Si tienes conocimientos de JavaScript, aprender Dart te resultará muy fácil: su sintaxis asíncrona (async/await) es casi idéntica.
Pero el sistema de tipos y el mecanismo de Null Safety de Dart te darán más seguridad en proyectos grandes.
Ejemplo
Comparación de la escritura de la misma funcionalidad en los dos lenguajes:
function greet(name) {
if (name === null || name === undefined) {
return 'Hello, stranger!';
}
return `Hello, ${name}!`;
}
console.log(greet('ejemplo'));
console.log(greet(null));
String greet(String? name) {
// name puede ser null, requiere manejo explícito
if (name == null) {
return 'Hello, stranger!';
}
return 'Hello, $name!';
}
void main() {
print(greet('ejemplo'));
print(greet(null));
}
Hello, ejemplo! Hello, stranger!
Relación entre Dart y Flutter
Muchas personas conocen Dart por primera vez gracias a Flutter.
En realidad, Flutter es la "aplicación asesina" (killer app) de Dart, pero Dart en sí mismo es un lenguaje de programación general independiente.
Las razones por las que Flutter eligió Dart son las siguientes:
- Compilación JITSoporta Hot Reload, que permite ver los efectos en menos de un segundo después de modificar el código, mejorando enormemente la eficiencia de desarrollo.
- Compilación AOTGenera código máquina nativo, con inicio rápido y ejecución fluida, sin la pérdida de rendimiento del puente de JavaScript.
- La UI declarativa de DartEncaja de forma natural con la estructura de árbol de Widgets de Flutter.
- Pila tecnológica unificada: Google mantiene tanto el lenguaje como el framework, con buena compatibilidad de versiones.
Antes de aprender Flutter, se recomienda dominar los fundamentos de Dart. Tras comprender las características del lenguaje, la curva de aprendizaje de Flutter será mucho más suave. Este tutorial está preparado para ese objetivo.
Breve historia de las versiones de Dart
| Versión | Fecha de publicación | Características importantes |
|---|---|---|
| Dart 1.0 | 2013 | Primera versión estable, características básicas del lenguaje |
| Dart 2.0 | 2018 | Sistema de tipos fuerte, new/const opcional |
| Dart 2.12 | 2021 | Introducción de Null Safety |
| Dart 3.0 | 2023 | Pattern matching, Records, modificadores de clase |
Este tutorial está escrito basado en la versión Dart 3.x; todos los ejemplos de código han sido verificados en Dart 3.0 y versiones superiores.
Otras extensiones