Anunciando Dart 2.10

Una nueva herramienta dart unificada para todas las tareas principales. También, una actualización sobre los plazos de null safety y principios de migración.

By: Michael Thomsen & Kevin Moore

Hoy anunciamos un nuevo release de Dart, la versión 2.10 (two-dot-ten). Este release incluye una nueva herramienta de desarrollo unificada para Dart: una sola herramienta para todas tus necesidades de desarrollo como crear proyectos, analizar y formatear código, ejecutar tests y compilar apps. También tenemos una actualización sobre la hoja de ruta y los plazos de null safety, y una discusión sobre los principios para migrar código existente a null safety.

Banner del release de Dart 2.10 destacando la herramienta unificada de Dart y la actualización de null safety.

Una nueva herramienta de desarrollo unificada para Dart

#

Dart forma la base del SDK de Flutter: no solo proporciona el lenguaje y los runtimes que potencian las apps de Flutter, sino que también soporta muchas tareas core del desarrollador como formatear, analizar y testear código. Sin embargo, mientras que Flutter tiene una sola herramienta de desarrollo de propósito general (el comando flutter), Dart ha tenido históricamente muchas herramientas más pequeñas (por ejemplo, dartfmt y dartanalyzer). Dart 2.10 tiene una nueva herramienta de desarrollo dart unificada que es muy similar a la herramienta flutter. Esta nueva herramienta soporta todas las tareas comunes, como crear nuevos proyectos y paquetes; analizar y formatear código; y ejecutar, compilar y testear proyectos. Para usar la herramienta, simplemente ejecuta el comando dart:

Output de ayuda en terminal para la herramienta dart de Dart 2.10.
Aprende sobre la herramienta dart de 2.10 ejecutando dart help.

Flutter incluye esta nueva herramienta de Dart en el SDK de Flutter. A partir del SDK de Flutter 1.22 de hoy, el directorio <flutter-sdk>/bin (que probablemente tienes en tu PATH) contiene tanto los comandos flutter como dart. Si haces tanto desarrollo de Flutter como de Dart de propósito general, obtienes ambas experiencias de desarrollo desde un solo SDK de Flutter, sin necesidad de instalar nada más.

Nota: Si quieres descargar e instalar un segundo SDK de Dart (quizás porque necesitas una versión diferente), asegúrate de que el SDK de la herramienta dart que deseas usar por defecto esté al principio de tu variable de entorno PATH.

En los próximos releases estables, planeamos añadir más a esta herramienta de dart y gradualmente deprecar las herramientas más pequeñas (dartdoc, dartfmt, dartanalyzer, etc.). El próximo año esperamos publicar SDKs de Dart que contengan solo la herramienta dart. Recomendamos que cambies a la nueva herramienta al ejecutar comandos de Dart ahora, ya sea manualmente en la terminal o en scripts de integración continua (CI), y danos feedback si algo falta o no funciona como debería.

Esperando null safety

#

Hemos experimentado un fuerte interés en null safety desde que lanzamos nuestra primera preview técnica hace unos meses. Todos esperamos null safety como una herramienta para evitar errores de null difíciles de detectar, y como bonus adicional las mejoras de rendimiento que esperamos ver con sound null safety. Si estás ansioso por aprender más, te recomendamos nuestra nueva página Understanding null safety. Si prefieres un video corto, revisa el video sobre null safety del evento Flutter Day de hace unos meses.

¿Cuándo podría estar listo null safety para usar? Aquí está el cronograma actual:

  1. Experimentación con Flutter en la preview técnica 2: Hemos migrado exitosamente la mayor parte de Flutter. Pronto — probablemente dentro del próximo mes — esperamos tener el framework completo de Flutter migrado, y así estar listos para habilitar el uso experimental con Flutter. Podrás probar null safety en un ejemplo de Flutter, y hacer una migración de prueba de tus apps y paquetes de Flutter. Necesitarás pasar un flag de experimentación, no deberías usarlo en producción, y no deberías publicar ningún paquete migrado.

  2. Migración temprana de paquetes con beta: Más adelante este año, completaremos el ajuste de rendimiento y tendremos suficiente cobertura de tests para darnos confianza de que la característica funciona como debería, y de que la compatibilidad hacia atrás es sólida. En ese momento publicaremos una versión beta de la característica, y no necesitarás pasar el flag de experimentación. Esperamos ver a los dueños de paquetes comenzar la migración de sus paquetes a null safety, con esa última ronda de validación de que la característica está lista para un release estable.

  3. Uso en producción con stable: Dependiendo del feedback del lanzamiento beta, arreglaremos cualquier issue restante y luego publicaremos a stable. Es difícil establecer un plazo concreto para esto, pero estamos pensando a principios del próximo año. Una vez que la característica sea estable, esperamos ver mucha adopción de null safety, con apps null-safe publicadas en las tiendas, y muchos paquetes null-safe publicados en pub.dev en versiones estables.

Principios para migrar a null safety

#

Nos gustaría compartir nuestros principios guía para la migración a null safety.

Adopta cuando estés listo

#

Null safety es un cambio fundamental al sistema de tipos de Dart. Cambia lo básico de las declaraciones de variables porque decidimos hacer que las variables sean no-nullable por defecto:

**Without null safety**                 W**ith null safety**

String s; // A String or null.      String s; // A String, not null.

Un cambio tan fundamental sería extremadamente disruptivo si insistiéramos en una adopción forzada. Queremos dejar que decidas cuándo es el momento adecuado, así que null safety es una característica opt-in: podrás usar los últimos releases de Dart y Flutter sin verse obligado a habilitar null safety antes de estar listo para hacerlo. Incluso puedes depender de paquetes que ya han habilitado null safety desde una app o paquete que aún no lo ha hecho.

Adopta incrementalmente, en orden

#

Recomendamos fuertemente migrar el código en orden, migrando primero las hojas del grafo de dependencias. Por ejemplo, si C depende de B que depende de A, migra primero A a null safety, luego B, luego C. Este orden aplica ya sea que A, B y C sean librerías, paquetes o apps.

¿Por qué es importante el orden? Aunque puedes hacer algo de progreso migrando código antes de que tus dependencias migren, te arriesgas a tener que hacer una segunda pasada de migración si tus dependencias cambian sus APIs durante su migración. Proporcionaremos herramientas para ayudarte a descubrir cuáles de tus dependencias han migrado. Si eres autor de un paquete, para evitar el riesgo de romper tus APIs, espera hasta que todas tus dependencias hayan migrado antes de publicar una versión null-safe.

Usa herramientas automatizadas para reducir el costo de migración

#

Cuando tus dependencias estén listas y elijas hacer la migración, puedes usar nuestra herramienta de migración. La herramienta funciona analizando todo tu código existente, buscando qué declaraciones pueden ser no-nullable (dejarse sin cambios), y cuáles deben ser nullable (necesitan un marcador de nullability ? en la declaración).

La herramienta de migración es interactiva, así puedes revisar las propiedades de nullability que la herramienta ha inferido. Si no estás de acuerdo con alguna de las conclusiones de la herramienta, puedes añadir hints de nullability para cambiar la inferencia. Por ejemplo, si quieres hacer una API no-nullable aunque se necesite algo de refactoring, puedes decírselo a la herramienta y volver a ejecutar el análisis de migración. Añadir algunos hints de migración puede tener un gran impacto en la calidad de la migración.

La interfaz interactiva de la herramienta dart migrate mostrando los cambios de código propuestos.

Obtén el beneficio completo con uso completo

#

Una vez que todo tu código — y los paquetes de los que depende — esté migrado, tu código puede ejecutarse con sound null safety. Antes de eso, tu código seguirá ejecutándose y compilándose como lo hace hoy, pero sound null safety completamente habilitada permite verificación completa en runtime y optimización del compilador. Ejecutar tests con sound null safety te ayuda a evitar problemas con aserciones de null en runtime, y compilar tus aplicaciones con sound null safety asegura que obtienes las optimizaciones actuales y futuras, como un output compilado más pequeño y una ejecución más rápida.

Próximos pasos

#

La nueva herramienta de desarrollo dart está disponible hoy en el SDK de Dart 2.10 y en el SDK de Flutter 1.22. Si ya tienes un SDK de Flutter, puedes obtener un SDK de Dart con un comando dart simplemente ejecutando flutter upgrade; esto te dará el SDK de Flutter 1.22, que tiene Dart 2.10 embebido. Recomendamos que cambies a la nueva herramienta de dart inmediatamente, y que danos feedback si algo falta o no funciona como debería.

Tendremos más noticias sobre null safety pronto — muy probablemente dentro del próximo mes, cuando esperamos que nuestros amigos del equipo de Flutter tengan un framework de Flutter con null safety listo para experimentación. Mantén un ojo en el blog de Flutter para una actualización. Mientras tanto puedes experimentar con código Dart null-safe usando DartPad con Null Safety, y aprender más sobre el diseño de la característica leyendo nuestra documentación de null safety.

Más de Dart