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ñoDescripción
Alto rendimientoCompatibilidad 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 fuerteCompatibilidad con inferencia de tipos, equilibrando la seguridad de tipos y la eficiencia de desarrollo.
MultiplataformaUn solo código puede compilarse a código máquina ARM, x64 o JavaScript.
Fácil de aprenderLa sintaxis toma prestado de lenguajes populares como Java, JavaScript, C#, etc., lo que reduce el costo de aprendizaje.
Null safetyMecanismo 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 usoDestino de compilaciónFrameworks/Herramientas típicos
MóvilCódigo máquina ARMFlutter
Frontend webJavaScriptAngularDart
ServidorCódigo máquina / JITShelf、Dart Frog
Línea de comandosCódigo máquinadart 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ónDartJavaScript
Sistema de tiposTipado fuerte, admite inferencia de tiposTipado débil, tipos dinámicos
Null safetyNull Safety integradoNo (requiere TypeScript o verificación manual)
Función de entradaDebe tener una función main()El script se ejecuta directamente
Clases y herenciaOOP basado en clases, herencia únicaBasado en cadenas de prototipos
Método de compilaciónDoble modo AOT + JITPrincipalmente JIT
Modelo de concurrenciaIsolate (paso de mensajes)Hilos Worker / bucle de eventos
Gestión de paquetespub.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:

// Versión en JavaScript
function greet(name) {
  if (name === null || name === undefined) {
    return 'Hello, stranger!';
  }
  return `Hello, ${name}!`;
}

console.log(greet('ejemplo'));
console.log(greet(null));
// Versión en Dart: null safety hace que los tipos sean más claros
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ónFecha de publicaciónCaracterísticas importantes
Dart 1.02013Primera versión estable, características básicas del lenguaje
Dart 2.02018Sistema de tipos fuerte, new/const opcional
Dart 2.122021Introducción de Null Safety
Dart 3.02023Pattern 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