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 !

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.