Saltar al contenido principal

Información general de Dart

Una breve introducción a Dart.

Logotipo del producto Dart Logotipo del producto Dart

Dart es un lenguaje optimizado para clientes para desarrollar aplicaciones rápidas en cualquier plataforma. Su objetivo es ofrecer el lenguaje de programación más productivo para el desarrollo multiplataforma, emparejado con una plataforma de runtime de ejecución flexible para frameworks de aplicaciones.

Los lenguajes se definen por su perfil técnico—las decisiones tomadas durante el desarrollo que dan forma a las capacidades y fortalezas de un lenguaje. Dart está diseñado para un perfil técnico que está particularmente adaptado al desarrollo de clientes, priorizando tanto el desarrollo (Hot Reload de estado en menos de un segundo) como experiencias de producción de alta calidad en una amplia variedad de objetivos de compilación (web, móvil y escritorio).

Dart también forma la base de Flutter. Dart proporciona el lenguaje y los runtimes que potencian las aplicaciones de Flutter, pero Dart también soporta muchas tareas principales de desarrollo como dar formato, analizar y probar el código.

Dart: El lenguaje

#

El lenguaje Dart es seguro en cuanto a tipos; utiliza la comprobación estática de tipos para garantizar que el valor de una variable siempre coincida con el tipo estático de la variable. A veces, esto se denomina tipado seguro (sound typing). Aunque los tipos son obligatorios, las anotaciones de tipo son opcionales debido a la inferencia de tipos. El sistema de tipado de Dart también es flexible, lo que permite el uso de un tipo dynamic combinado con comprobaciones en tiempo de ejecución, lo que puede ser útil durante la experimentación o para código que necesita ser especialmente dinámico.

Dart tiene sound null safety incorporado. Esto significa que los valores no pueden ser nulos a menos que digas que pueden serlo. Con sound null safety, Dart puede protegerte de excepciones de nulos en tiempo de ejecución a través del análisis estático de código. A diferencia de muchos otros lenguajes con seguridad contra nulos, cuando Dart determina que una variable no es nulable, esa variable nunca puede ser nula. Si inspeccionas tu código en ejecución en el depurador, verás que la no nulabilidad se conserva en tiempo de ejecución; de ahí sound null safety.

El siguiente ejemplo de código muestra varias características del lenguaje Dart, incluyendo bibliotecas, llamadas async, tipos nulables y no nulables, sintaxis de flecha, generadores, streams y getters. Para aprender más sobre el lenguaje, echa un vistazo al recorrido por el lenguaje Dart.

Dart: Las bibliotecas

#

Dart tiene un rico conjunto de bibliotecas principales, que proporcionan elementos esenciales para muchas tareas de programación cotidianas:

  • Tipos integrados, colecciones y otra funcionalidad principal para cada programa de Dart (dart:core)
  • Tipos de colecciones más completos, como colas, listas enlazadas, hashmaps y árboles binarios (dart:collection)
  • Codificadores y decodificadores para convertir entre diferentes representaciones de datos, incluyendo JSON y UTF-8 (dart:convert)
  • Constantes y funciones matemáticas, y generación de números aleatorios (dart:math)
  • Soporte para programación asíncrona, con clases como Future y Stream (dart:async)
  • Listas que manejan de manera eficiente datos de tamaño fijo (por ejemplo, enteros sin signo de 8 bytes) y tipos numéricos SIMD (dart:typed_data)
  • Soporte de archivos, sockets, HTTP y otras E/S para aplicaciones que no son web (dart:io)
  • Interfaces de funciones externas para la interoperabilidad con otro código que presenta una interfaz de estilo C (dart:ffi)
  • Programación concurrente utilizando isolates—hilos de trabajo independientes que son similares a los hilos (threads) pero no comparten memoria, comunicándose únicamente a través de mensajes (dart:isolate)
  • Elementos HTML y otros recursos para aplicaciones web que necesitan interactuar con el navegador y el Modelo de Objetos del Documento (DOM) (dart:js_interop y package:web)

Más allá de las bibliotecas principales, se proporcionan muchas APIs a través de un conjunto completo de paquetes. El equipo de Dart publica muchos paquetes complementarios útiles, como estos:

Además, editores externos y la comunidad en general publican miles de paquetes, con soporte para características como estas:

Para ver una serie de ejemplos prácticos que presentan las bibliotecas principales de Dart, lee la documentación de la biblioteca principal. Para encontrar APIs adicionales, consulta la página de paquetes de uso común.

Dart: Las plataformas

#

La tecnología de compilación de Dart te permite ejecutar código de diferentes maneras:

  • Plataforma nativa: Para aplicaciones destinadas a dispositivos móviles y de escritorio, Dart incluye tanto una Dart VM con compilación just-in-time (JIT) como un compilador ahead-of-time (AOT) para producir código máquina.

  • Plataforma web: Para aplicaciones destinadas a la web, Dart puede compilar para fines de desarrollo o producción. Sus compiladores web traducen Dart a JavaScript o WebAssembly.

Una ilustración de las plataformas de destino soportadas por Dart

El framework Flutter es un popular kit de herramientas de interfaz de usuario multiplataforma que funciona con la plataforma Dart, y que proporciona herramientas y bibliotecas de interfaz de usuario para crear experiencias de IU que se ejecutan en iOS, Android, macOS, Windows, Linux y la web.

Dart Native (código máquina JIT y AOT)

#

Durante el desarrollo, un ciclo rápido de desarrollo es fundamental para la iteración. La Dart VM ofrece un compilador just-in-time (JIT) con recompilación incremental (que habilita Hot Reload), recopilación de métricas en vivo (que potencia DevTools) y un amplio soporte de depuración.

Cuando las aplicaciones están listas para ser implementadas en producción, ya sea que las publiques en una tienda de aplicaciones o las despliegues en un backend de producción, el compilador ahead-of-time (AOT) de Dart puede compilar a código máquina nativo ARM o x64. Tu aplicación compilada con AOT se inicia con un tiempo de arranque corto y constante.

El código compilado con AOT se ejecuta dentro de un runtime de Dart eficiente que aplica el sistema de tipos seguro de Dart y administra la memoria mediante una asignación rápida de objetos y un recolector de basura generacional.

Dart Web (JavaScript de desarrollo y producción y WebAssembly)

#

Dart Web permite ejecutar código Dart en plataformas web potenciadas por JavaScript. Con Dart Web, compilas código Dart a código JavaScript, que a su vez se ejecuta en un navegador; por ejemplo, V8 dentro de Chrome. Alternativamente, el código Dart se puede compilar a WebAssembly.

Dart web contiene tres modos de compilación:

  • Un compilador de desarrollo JavaScript incremental que permite un ciclo rápido de desarrollo con recompilación incremental (que habilita Hot Reload).
  • Un compilador de producción de JavaScript optimizador que compila código Dart a un JavaScript rápido, compacto y desplegable. Estas eficiencias provienen de técnicas como la eliminación de código muerto (dead-code elimination).
  • Un compilador de producción de WebAssembly (WasmGC) optimizador que compila código Dart a un código WebAssembly GC superrápido y desplegable.

Más información:

El runtime de Dart

#

Independientemente de la plataforma que utilices o de cómo compiles tu código, la ejecución del mismo requiere un runtime de Dart. Este runtime es responsable de las siguientes tareas críticas:

  • Administrar la memoria: Dart utiliza un modelo de memoria administrada, donde la memoria no utilizada es reclamada por un recolector de basura (GC).

  • Aplicar el sistema de tipos de Dart: Aunque la mayoría de las comprobaciones de tipo en Dart son estáticas (en tiempo de compilación), algunas comprobaciones de tipo son dinámicas (en tiempo de ejecución). Por ejemplo, el runtime de Dart aplica comprobaciones dinámicas mediante operadores de comprobación de tipo y conversión (cast).

  • Administrar isolates: El runtime de Dart controla el isolate principal (donde normalmente se ejecuta el código) y cualquier otro isolate que cree la aplicación.

En plataformas nativas, el runtime de Dart se incluye automáticamente dentro de los ejecutables independientes, y es parte de la Dart VM proporcionada por el comando dart run.

Aprender Dart

#

Tienes muchas opciones para aprender Dart. Aquí tienes algunas que recomendamos: