Génération de code dans Dart. Partie 1. Bases

On sait qu'il est trĂšs bon pour un programmeur d'ĂȘtre paresseux , car faire plus avec moins est la clĂ© du progrĂšs . Personne n'aime faire la mĂȘme chose encore et encore. C'est fatigant, ennuyeux et pas du tout crĂ©atif. En rĂ©pĂ©tant la mĂȘme action, nous faisons souvent des erreurs, mais, heureusement, il y a ceux qui sont vraiment bons et efficaces pour effectuer des tĂąches similaires. Et ce sont des ORDINATEURS !


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


Aujourd'hui, la gĂ©nĂ©ration de code est la capacitĂ© de faire le travail dans les plus brefs dĂ©lais . L'idĂ©e de base est simple: trouver un modĂšle dans les mĂȘmes parties fastidieuses du code que vous devez Ă©crire encore et encore, crĂ©er un outil de gĂ©nĂ©ration, l'exĂ©cuter et voir comment la magie opĂšre!


Dans le monde du développement Android, ces outils sont bien connus de tous les développeurs. C'est Retrofit, et Dagger, and Room. Et Dart? Et une question non moins importante: de quoi avons-nous besoin pour créer nos propres outils de génération de code?


Génération de fléchettes et de code: des outils abordables


Pour créer un outil de génération de code, nous avons besoin des deux packages suivants:



source_gen


Ce package fournit une API pratique pour générer du code. Il s'agit d'une abstraction de certains packages Dart de bas niveau, tels que l' analyseur et la construction . Bien que l'utilisation de ce package soit facultative, elle peut vous éviter de nombreuses difficultés.


source_gen fournit deux classes génératrices abstraites qui suivent le modÚle Visitor :


  • Generator : lors de l'hĂ©ritage de cette classe, chaque Ă©lĂ©ment de votre code sera visitĂ©. Ainsi, vous avez un contrĂŽle total sur ce qu'il faut faire avec chaque nƓud ou Ă©lĂ©ment visitĂ©.
  • GeneratorForAnnotation : cette classe est similaire Ă  un simple Generator, mais lorsque vous hĂ©ritez de cette classe, vous spĂ©cifiez Ă©galement "annotation". Ainsi, seuls les nƓuds annotĂ©s avec cette annotation seront visitĂ©s. Le reste du code sera ignorĂ©.

Vous devez également configurer le générateur, qui sera un wrapper sur le générateur. Il y a trois options:


  • Si vous souhaitez Ă©crire un morceau de code partial , vous devez choisir SharedPartBuilder . "part" vous permet de diviser la bibliothĂšque en plusieurs fichiers Dart. SharedPartBuilder crĂ©e un fichier avec l'extension .g.dart .
  • Vous pouvez Ă©galement utiliser PartBuilder si vous souhaitez utiliser l'approche "part", mais vous avez besoin de plus de contrĂŽle sur l'extension du fichier gĂ©nĂ©rĂ©, par exemple .my_file.dart .
  • Si vous souhaitez Ă©crire une bibliothĂšque autonome pouvant ĂȘtre importĂ©e, utilisez LibraryBuilder .

build_runner


Cet outil vous permet d'exĂ©cuter le gĂ©nĂ©rateur au stade du dĂ©veloppement. Il peut ĂȘtre appelĂ© depuis la ligne de commande:


 pub run build_runner <command> 

Au lieu de <command> peut y avoir:


  • build : dĂ©marre la gĂ©nĂ©ration une fois.
  • watch : lance un dĂ©mon qui suit les changements dans les fichiers et dĂ©marre la gĂ©nĂ©ration en cas de besoin.
  • serve : similaire Ă  watch, mais il dĂ©marre comme un serveur de dĂ©veloppement.
  • test : dĂ©marre la gĂ©nĂ©ration une fois, crĂ©e un rĂ©pertoire de sortie partagĂ©, puis exĂ©cute pub run test --precompiled <merged-output-dir> .

Pour que source_gen fonctionne, vous devez également créer un fichier buil.yaml , qui indique les détails de la configuration du générateur de code.


Utilisation de la génération de code dans Dart


La génération de code est utilisée dans de nombreuses bibliothÚques bien connues pour Dart:



En savoir plus ...


La deuxiÚme partie montrera comment utiliser les annotations et la génération de code pour suivre tous les TODO dans l'application.

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


All Articles