Geração de código no Dart. Parte 1. Noções básicas

Sabe-se que é muito bom para um programador ser preguiçoso , porque fazer mais com menos é a chave para o progresso . Ninguém gosta de fazer a mesma coisa repetidamente. Isso é cansativo, chato e nada criativo. Repetindo a mesma ação, geralmente cometemos erros, mas, felizmente, existem aqueles que são realmente bons e eficazes na execução de tarefas semelhantes. E estes são COMPUTADORES !


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


Hoje, a geração de código é a capacidade de fazer o trabalho no menor tempo possível . A idéia básica é simples: encontrar um padrão nas mesmas e entediantes seções do código que precisam ser escritas repetidamente, crie uma ferramenta para geração, execute-a e veja como a mágica acontece!


No mundo do desenvolvimento do Android, essas ferramentas são bem conhecidas de todos os desenvolvedores. Isso é Retrofit, Dagger e Room. E o Dart? E não uma questão menos importante: o que precisamos para criar nossas próprias ferramentas para geração de código?


Geração de dardo e código: ferramentas acessíveis


Para criar uma ferramenta para geração de código, precisamos dos dois pacotes a seguir:



source_gen


Este pacote fornece uma API conveniente para gerar código. Esta é uma abstração de alguns pacotes Dart de baixo nível, como analisador e compilação . Embora o uso deste pacote seja opcional, ele pode salvá-lo de muitas dificuldades.


source_gen fornece duas classes geradoras abstratas que seguem o padrão Visitor :


  • Generator : ao herdar essa classe, todos os elementos do seu código serão visitados. Assim, você tem controle total sobre o que fazer com cada nó ou elemento visitado.
  • GeneratorForAnnotation : essa classe é semelhante a um gerador simples, mas quando você herda essa classe, também especifica "anotação". Portanto, apenas os nós anotados com esta anotação serão visitados. O restante do código será ignorado.

Você também precisa configurar o Builder , que será um invólucro sobre o gerador. Existem três opções:


  • Se você deseja escrever um trecho de código partial , escolha SharedPartBuilder . "part" permite dividir a biblioteca em vários arquivos Dart. SharedPartBuilder cria um arquivo com a extensão .g.dart .
  • Você também pode usar o PartBuilder se quiser usar a abordagem "parte", mas precisar de mais controle sobre a extensão do arquivo gerado, por exemplo .my_file.dart .
  • Se você deseja gravar uma biblioteca independente que possa ser importada, use o LibraryBuilder .

build_runner


Essa ferramenta permite executar o gerador na fase de desenvolvimento. Pode ser chamado a partir da linha de comando:


 pub run build_runner <command> 

No lugar de <command> pode estar:


  • build : inicia a geração uma vez.
  • watch : inicia um daemon que rastreia alterações nos arquivos e inicia a geração quando necessário.
  • serve : semelhante ao watch, mas começa como um servidor de desenvolvimento.
  • test : inicia a geração uma vez, cria um diretório de saída compartilhado e depois executa o pub run test --precompiled <merged-output-dir> .

Para que o source_gen funcione, você também deve criar um arquivo buil.yaml , que indica os detalhes da configuração do gerador de código.


Usando geração de código no Dart


A geração de código é usada em muitas bibliotecas conhecidas do Dart:



Mais ...


A segunda parte mostrará como usar anotações e geração de código para rastrear todos os TODO no aplicativo.

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


All Articles