Anunciando Dart 2: Optimizado para desarrollo del lado del cliente

Hoy anunciamos Dart 2, un reinicio del lenguaje para estar únicamente optimizado para desarrollo del lado del cliente para web y móvil.

Una versión de peluche de Dash, la mascota azul de Dart y Flutter. Tiene un pico largo y marrón y una etiqueta adjunta que dice 'Dart'.

Hoy anunciamos Dart 2, un reinicio del lenguaje para adoptar nuestra visión de Dart: como un lenguaje únicamente optimizado para el desarrollo del lado del cliente para web y móvil.

Con Dart 2, hemos fortalecido y simplificado drásticamente el sistema de tipos, limpiado la sintaxis y reconstruido gran parte de la cadena de herramientas de desarrollo desde cero para hacer que el desarrollo móvil y web sea más agradable y productivo. Dart 2 también incorpora las lecciones aprendidas de los primeros adoptantes del lenguaje, incluyendo Flutter, AdWords y AdSense, así como miles de mejoras grandes y pequeñas en respuesta a los comentarios de los clientes.

Principios fundamentales de Dart

#

Antes de hablar más sobre los avances en Dart 2, vale la pena identificar por qué creemos que Dart está bien posicionado para las necesidades de los desarrolladores del lado del cliente.

Además de los atributos necesarios para un lenguaje moderno de propósito general, el desarrollo del lado del cliente se beneficia de un lenguaje que sea:

  • Productivo. La sintaxis debe ser clara y concisa, las herramientas simples, y los ciclos de desarrollo casi instantáneos y en el dispositivo.

  • Rápido. El rendimiento en tiempo de ejecución y el inicio deben ser excelentes y predecibles incluso en dispositivos móviles pequeños.

  • Portable. Los desarrolladores de cliente tienen que pensar en tres plataformas hoy: iOS, Android y Web. El lenguaje necesita funcionar bien en todas ellas.

  • Accesible. El lenguaje no puede alejarse demasiado de lo familiar si desea ser relevante para millones de desarrolladores.

  • Reactivo. Un estilo de programación reactivo debe ser soportado por el lenguaje.

Dart se ha usado para lanzar muchas aplicaciones de alta calidad y misión crítica en la web, iOS y Android en Google y en otros lugares, y es una gran opción para el desarrollo móvil y web:

  • Dart aumenta la velocidad de desarrollo porque tiene una sintaxis clara y concisa y es capaz de ejecutarse en una VM con un compilador JIT. Esto último permite el hot reload con estado durante el desarrollo móvil, resultando en ciclos de desarrollo súper rápidos, donde puedes editar código, compilar y reemplazar en la app en ejecución del dispositivo.

  • Con su capacidad de compilar eficientemente a código nativo por adelantado, Dart ofrece un rendimiento predecible y alto, y un inicio rápido en dispositivos móviles.

  • Dart soporta la compilación a código nativo (ARM, x86, etc.) para un rendimiento móvil rápido, así como la transpilación a JavaScript eficiente para la web.

  • Dart es accesible para muchos desarrolladores existentes, gracias a sus aspectos orientados a objetos poco sorprendentes y a una sintaxis que — según nuestros usuarios — permite que cualquier desarrollador de C++, C#, Objective-C o Java sea productivo en cuestión de días.

  • Dart funciona bien para programación reactiva con sus bibliotecas principales probadas en batalla, incluyendo streams y futures; también tiene un excelente soporte para gestionar objetos de corta duración a través de su rápido recolector de basura generacional.

Dart 2: Mejor desarrollo del lado del cliente

#

En Dart 2, hemos dado pasos adicionales para consolidar Dart como un gran lenguaje para el desarrollo del lado del cliente. En particular, hemos añadido varias características nuevas incluyendo tipado fuerte y la mejora de cómo se define la UI como código.

Tipado fuerte y sólido

#

Los equipos detrás de AdWords y AdSense han construido algunas de las apps web más grandes y avanzadas de Google con Dart para gestionar los anuncios que generan una gran parte de los ingresos de Google. Al trabajar estrechamente con estos equipos, identificamos una gran oportunidad para fortalecer el sistema de tipos de Dart. Esto ayuda a los desarrolladores de Dart a detectar errores más temprano en el proceso de desarrollo, escalar mejor en apps construidas por equipos grandes y aumentar la calidad general del código.

Esto no es único, por supuesto. En el ecosistema web más amplio, también hay una tendencia creciente hacia añadir anotaciones de tipo a JavaScript. Por ejemplo, TypeScript y Flow ambos extienden JavaScript con anotaciones de tipo e inferencia para mejorar la capacidad de analizar código.

En el pequeño ejemplo de abajo, la inferencia de tipos de Dart 2 ayuda a descubrir un error algo sutil y, como resultado, ayuda a mejorar la calidad general del código.

dart
void main() {
  List<int> prices = ['99', '27', '10000', '20000000'];

  // Sort in place from smallest to largest
  prices.sort();

  print('Lowest price is ${prices[0]}!');
}

¿Qué hace este código? Razonablemente podrías esperar que imprima ‘27’. Pero sin el sistema de tipos sólido de Dart 2 habilitado imprime ‘10000’, porque resulta ser el menor elemento en la lista de strings cuando se ordenan lexicográficamente. Con Dart 2, sin embargo, este código dará un error de tipo.

UI como código

#

Al crear UI, tener que alternar entre un lenguaje de marcado de UI separado y el lenguaje de programación en el que estás escribiendo tu app a menudo lleva a la frustración. Nos esforzamos por hacer que la definición de UI como código sea una experiencia deliciosa para reducir drásticamente la necesidad de este cambio de contexto. Dart 2 introduce new y const opcionales. Esta característica muy solicitada es muy valiosa por sí sola, y también marca la dirección para otras cosas por venir. Por ejemplo, con new y const opcionales podemos limpiar la definición de un widget de UI para que no use ni una sola palabra clave.

dart
// Before Dart 2
Widget build(BuildContext context) {
  return new Container(
    height: 56.0,
    padding: const EdgeInsets.symmetric(horizontal: 8.0),
    decoration: new BoxDecoration(color: Colors.blue[500]),
    child: new Row(
      ...
    ),
  );
}

// After Dart 2
Widget build(BuildContext context) =>
  Container(
    height: 56.0,
    padding: EdgeInsets.symmetric(horizontal: 8.0),
    decoration: BoxDecoration(color: Colors.blue[500]),
    child: Row(
      ...
    ),
  );

Usos de Dart del lado del cliente

#

Móvil

#

Uno de los usos más significativos de Dart es para Flutter, el nuevo framework de UI móvil de Google para crear interfaces nativas de alta calidad para iOS y Android. La app oficial del inmensamente popular show Hamilton: The Musical es un ejemplo de lo que Flutter está permitiendo a los desarrolladores construir en tiempo récord. Flutter usa un estilo de programación reactivo y controla toda la UI píxel a píxel. Para Flutter, Dart cumple con los requisitos en términos de facilidad de aprendizaje, programación reactiva, gran velocidad de desarrollo y un sistema de tiempo de ejecución de alto rendimiento con un recolector de basura rápido.

Web

#

Dart es una plataforma probada para aplicaciones web de misión crítica. Tiene bibliotecas específicas para web como dart:html junto con un framework web completo basado en Dart. Los equipos que usan Dart para desarrollo web están encantados con las mejoras en velocidad de desarrollo. Como explica Manish Gupta, VP de Ingeniería de Google AdWords:

El frontend de AdWords es grande y complejo, y es crítico para la mayoría de los ingresos de Google. Elegimos Dart por la gran combinación de rendimiento y predictibilidad, facilidad de aprendizaje, un sistema de tipos sólido y soporte web y móvil. Nuestros ingenieros son de dos a tres veces más productivos que antes, y estamos encantados de haber hecho el cambio.

Avanzando

#

Con Flutter y Dart, los desarrolladores finalmente tienen la oportunidad de escribir apps de calidad de producción para Android, iOS y la web sin compromisos, usando una base de código compartida. Como resultado, los miembros del equipo pueden moverse fluidamente entre plataformas y ayudarse mutuamente con, por ejemplo, revisiones de código. Hasta ahora, hemos visto equipos como AdWords Express y AppTree compartir entre el 50% y el 70% de su código entre móvil y web.

Dart es un proyecto de código abierto y un estándar ECMA abierto. Agradecemos las contribuciones tanto al proyecto principal de Dart como al ecosistema creciente de paquetes para Dart.

Puedes probar Dart 2 en Flutter y en el Dart SDK desde la línea de comandos. Para el Dart SDK, obtén la última pre-release de Dart 2 del canal dev y asegúrate de ejecutar tu código con el flag --preview-dart-2. También te invitamos a unirte a nuestra comunidad en gitter.

Con las mejoras anunciadas hoy, Dart 2 es un lenguaje productivo, limpio y probado en batalla que aborda los desafíos del desarrollo moderno de apps. Ya es amado por algunos de los desarrolladores más exigentes del planeta, y esperamos que tú también lo ames.

Más de Dart