Generación de código en Dart. Parte 1. Conceptos básicos

Se sabe que es muy bueno para un programador ser flojo , porque hacer más con menos es la clave para progresar . A nadie le gusta hacer lo mismo una y otra vez. Esto es agotador, aburrido y nada creativo. Al repetir la misma acción, a menudo cometemos errores, pero, afortunadamente, hay quienes son realmente buenos y efectivos para realizar tareas similares. ¡Y estos son COMPUTADORAS !


https://yougottobekidding.wordpress.com/2012/02/18/geeks-and-repetitive-tasks/


Hoy, la generación de código es la capacidad de hacer el trabajo en el menor tiempo posible . La idea básica es simple: encontrar un patrón en las mismas y tediosas secciones de código que deben escribirse una y otra vez, crear una herramienta para la generación, ejecutarla y ver cómo sucede la magia.


En el mundo del desarrollo de Android, tales herramientas son bien conocidas por todos los desarrolladores. Esto es Retrofit, y Dagger, y Room. ¬ŅQu√© hay de Dart? Y una pregunta no menos importante: ¬Ņqu√© necesitamos para crear nuestras propias herramientas para la generaci√≥n de c√≥digo?


Dart y generación de código: herramientas asequibles


Para crear una herramienta para la generación de código, necesitamos los siguientes dos paquetes:



fuente_gen


Este paquete proporciona una API conveniente para generar código. Esta es una abstracción de algunos paquetes Dart de bajo nivel, como el analizador y la compilación . Aunque el uso de este paquete es opcional, puede salvarlo de muchas dificultades.


source_gen proporciona dos clases generadoras abstractas que siguen el patrón Visitor :


  • Generator : al heredar esta clase, se visitar√°n todos los elementos de su c√≥digo. Por lo tanto, tiene control total sobre qu√© hacer con cada nodo o elemento visitado.
  • GeneratorForAnnotation : esta clase es similar a un generador simple, pero cuando hereda esta clase, tambi√©n especifica "anotaci√≥n". Por lo tanto, solo se visitar√°n los nodos que est√©n anotados con esta anotaci√≥n. El resto del c√≥digo ser√° ignorado.

También debe configurar el generador, que será un contenedor sobre el generador. Hay tres opciones:


  • Si desea escribir una parte partial del c√≥digo, debe elegir SharedPartBuilder . "parte" le permite dividir la biblioteca en varios archivos Dart. SharedPartBuilder crea un archivo con la extensi√≥n .g.dart .
  • Tambi√©n puede usar PartBuilder si desea usar el enfoque de "parte", pero necesita m√°s control sobre la extensi√≥n del archivo generado, por ejemplo .my_file.dart .
  • Si desea escribir una biblioteca independiente que se pueda importar, use LibraryBuilder .

build_runner


Esta herramienta le permite ejecutar el generador en la etapa de desarrollo. Se puede llamar desde la línea de comando:


 pub run build_runner <command> 

En lugar de <command> puede ser:


  • build : comienza la generaci√≥n una vez.
  • watch : lanza un demonio que rastrea los cambios en los archivos y comienza la generaci√≥n cuando es necesario.
  • serve : similar a mirar, pero comienza igual que un servidor de desarrollo.
  • test : comienza la generaci√≥n una vez, crea un directorio de salida compartido y luego ejecuta la pub run test --precompiled <merged-output-dir> .

Para que source_gen funcione, también debe crear un archivo buil.yaml , que indica los detalles de la configuración del generador de código.


Usando Generación de Código en Dart


La generación de código se usa en muchas bibliotecas conocidas para Dart:



M√°s ...


La segunda parte mostrará cómo usar las anotaciones y la generación de código para rastrear todos los TODO en la aplicación.

Source: https://habr.com/ru/post/445824/


All Articles