Il est 22h15 lorsque je découvre que passer la souris au-dessus d’une fonction JS dans VSCode (Visual Studio Code pour les intimes) indique les paramètres avec un any peu clair.
Dans un programme que je rédige, j’utilise deux Map(), sorte de tableau associatif, mais dont l’usage dans les fonctions n’est pas clair :
- La classe VMBmodule pour les modules
- La classe VMBsubmodule pour les sous-parties des VMBModules
Explications Velbus
Je ne sais pas comment Velbus en est arrivé à cette architecture, mais en gros, on peut interroger un VMBmodule pour avoir le type de module, sa date de conception (version) et quelques états des sous-modules, mais la plupart des messages reçus sur le bus concerneront les sous-modules.
Par exemple, chaque lampe de la maison est contrôlée par un relais (donc, un sous-module) et un module VMB4RY contient 4 relais (donc 4 sous-modules). Ma clé est alors l’adresse du module suivi de la partie concernée, par exemple : $05-1, $05-2, $05-3 et $05-4.
Explication JavaScript
Bref, j’ai deux classes et deux listes de ces objets : une liste pour les VMBmodule et une liste pour les VMBsubmodule, mais quand je récupère des éléments d’un de ces objets, impossible de savoir quels attributs il a, c’est tout mélangé (quand j’écris le code suivant, VSCode me propose de compléter mon code avec tous les attributs qu’il trouve dans le programme) :
let newModule = new VMBsubmodule()
console.log(newModule.
Le pire est qu’en passant la souris au-dessus de newModule, je ne sais pas quel objet il contient (any s’affiche).
Magie JSDoc
C’est ici que la magie de la documentation de code opère : en commentant avec /** juste au-dessus de l’initialisation de mes maps, mon stagiaire ClaudeAI, répond à ma question : « Voici comment vous pouvez spécifier les types pour vos Map »
Sincèrement, je connais l’utilisation magique de JSDoc au-dessus d’une fonction (et c’est vraiment génial), mais là, je n’ai pas trouvé aisément d’information sur comment faire, et mon stagiaire IA me donne une réponse que j’ai adaptée et qui marche :
Quand je passe la souris sur subModTmp (variable temporaire de type VMBsubmodule) ou sur un attribut de cet objet, VSCode m’affiche la bonne information et quand j’ajoute un . après le nom de l’objet, VSCode affiche correctement les membres disponibles.
Conclusion
Oui, il existe TypeScript pour faire des programmes typés (mais en fait, il y a un transpiler qui va convertir mon code TS en Javascript : l’idéal serait alors de faire du deno, le « concurrent » de Node, conçu par le même auteur).
Finalement, une grande aide consiste à faire une bonne documentation : cela participe à fiabiliser le programme et je vais maintenant prendre plus de temps à créer correctement la documentation en JSDoc.