Saltar al contenido principal

Dart efectivo

Mejores prácticas para construir bibliotecas Dart consistentes, mantenibles y eficientes.

En los últimos años, hemos escrito una gran cantidad de código Dart y aprendido mucho sobre qué funciona bien y qué no. Compartimos esto contigo para que también puedas escribir código consistente, robusto y rápido. Hay dos temas principales:

  1. Sé consistente. Cuando se trata de cosas como el formato y el uso de mayúsculas, los argumentos sobre cuál es mejor son subjetivos e imposibles de resolver. Lo que sí sabemos es que ser consistente es objetivamente útil.

    Si dos fragmentos de código se ven diferentes, debería ser porque son diferentes de alguna manera significativa. Cuando un fragmento de código resalta y llama tu atención, debería hacerlo por una razón útil.

  2. Sé breve. Dart fue diseñado para ser familiar, por lo que hereda muchas de las mismas declaraciones y expresiones que C, Java, JavaScript y otros lenguajes. Pero creamos Dart porque hay mucho espacio para mejorar lo que esos lenguajes ofrecen. Agregamos un montón de características, desde la interpolación de cadenas hasta los parámetros de inicialización, para ayudarte a expresar tu intención de manera más simple y fácil.

    Si hay múltiples formas de decir algo, generalmente deberías elegir la más concisa. Esto no significa que debas hacer code golf para meter un programa entero en una sola línea. El objetivo es código que sea económico, no denso.

Las guías

#

Dividimos las pautas en algunas páginas separadas para facilitar su lectura:

  • Guía de estilo – Esto define las reglas para el diseño y organización del código, o al menos las partes que dart format no maneja por ti. La guía de estilo también especifica cómo se formatean los identificadores: camelCase, using_underscores, etc.

  • Guía de documentación – Esto te dice todo lo que necesitas saber sobre qué va dentro de los comentarios. Tanto los comentarios de documentación como los comentarios de código normales y corrientes.

  • Guía de uso – Esto te enseña cómo hacer el mejor uso de las características del lenguaje para implementar comportamiento. Si está en una declaración o expresión, está cubierto aquí.

  • Guía de diseño – Esta es la guía más suave, pero la que tiene el alcance más amplio. Cubre lo que hemos aprendido sobre diseñar APIs consistentes y utilizables para bibliotecas. Si está en una firma de tipo o declaración, esto lo cubre.

Para enlaces a todas las pautas, consulta el resumen.

Cómo leer las guías

#

Cada guía se divide en algunas secciones. Las secciones contienen una lista de pautas. Cada pauta comienza con una de estas palabras:

  • Las pautas DO describen prácticas que siempre deben seguirse. Casi nunca habrá una razón válida para desviarse de ellas.

  • Las pautas DON'T son lo contrario: cosas que casi nunca son una buena idea. Con suerte, no tenemos tantas como otros lenguajes porque tenemos menos bagaje histórico.

  • Las pautas PREFER son prácticas que deberías seguir. Sin embargo, puede haber circunstancias donde tenga sentido hacer lo contrario. Solo asegúrate de entender las implicaciones completas de ignorar la pauta cuando lo hagas.

  • Las pautas AVOID son el dual de "preferir": cosas que no deberías hacer pero donde puede haber buenas razones para hacerlo en raras ocasiones.

  • Las pautas CONSIDER son prácticas que puedes o no querer seguir, dependiendo de las circunstancias, precedentes y tu propia preferencia.

Algunas pautas describen una excepción donde la regla no aplica. Cuando se listan, las excepciones pueden no ser exhaustivas—es posible que aún necesites usar tu juicio en otros casos.

Esto suena como si la policía fuera a derribar tu puerta si no tienes los cordones atados correctamente. Las cosas no son tan malas. La mayoría de las pautas aquí son sentido común y somos personas razonables. El objetivo, como siempre, es código agradable, legible y mantenible.

El analizador de Dart proporciona un linter para ayudarte a escribir código bueno y consistente que siga estas y otras pautas. Si existe una o más reglas de linter que pueden ayudarte a seguir una pauta entonces la pauta enlaza a esas reglas. Los enlaces usan el siguiente formato:

Regla de linter: unnecessary_getters_setters

Para aprender a usar el linter, consulta Habilitar reglas de linter y la lista de reglas de linter.

Glosario

#

Para mantener las pautas breves, usamos algunos términos abreviados para referirnos a diferentes construcciones de Dart.

  • Un miembro de biblioteca es un campo, getter, setter o función de nivel superior. Básicamente, cualquier cosa en el nivel superior que no sea un tipo.

  • Un miembro de clase es un constructor, campo, getter, setter, función u operador declarado dentro de una clase. Los miembros de clase pueden ser de instancia o estáticos, abstractos o concretos.

  • Un miembro es un miembro de biblioteca o un miembro de clase.

  • Una variable, cuando se usa generalmente, se refiere a variables de nivel superior, parámetros y variables locales. No incluye campos estáticos o de instancia.

  • Un tipo es cualquier declaración de tipo con nombre: una clase, typedef o enum.

  • Una propiedad es una variable de nivel superior, getter (dentro de una clase o en el nivel superior, de instancia o estático), setter (igual), o campo (de instancia o estático). Aproximadamente cualquier construcción con nombre "similar a un campo".

Resumen de todas las reglas

#

Estilo

#

Identifiers

Ordering

Formatting

Documentación

#

Comments

Doc comments

Markdown

Writing

Uso

#

Libraries

Null

Strings

Collections

Functions

Variables

Members

Constructors

Error handling

Asynchrony

Diseño

#

Names

Libraries

Classes and mixins

Constructors

Members

Types

Parameters

Equality