![]() |
[Tuto] Coder proprement un script en TCL - Version imprimable +- Communauté Eggdrop (https://forum.eggdrop.fr) +-- Forum : Eggdrop et scripts (https://forum.eggdrop.fr/forumdisplay.php?fid=8) +--- Forum : F.A.Q. (https://forum.eggdrop.fr/forumdisplay.php?fid=9) +--- Sujet : [Tuto] Coder proprement un script en TCL (/showthread.php?tid=634) Pages :
1
2
|
[Tuto] Coder proprement un script en TCL - Mareo - 22/03/2010 Bonsoir à tous, Je vous propose ce soir un petit tuto, car en relisant certains scripts je me dis que parfois ce serait pas du luxe. Je vais commencer par les règles le plus importantes et quelques petites conventions bien pratique, les réflexes à acquérir, bref, l'indispensable. Et puis je vais terminer par les trucs un peu moins importants, les petites astuces, etc. I - Avant de commencer à coder (pensez à préparer du café) Choisissez un nom évocateur pour votre script c'est toujours utile. Faites une petit cadre tendance de commentaires en haut de votre script afin d'indiquer le nom du script, son ou ses auteurs (et leurs emails), son utilité, éventuellement sa version et un petit changelog, bugs connus, à faire, etc. Le tout ne dépassant idéalement pas les 80 colonnes, j'y reviendrai un peu plus tard. Un bon exemple serait : tcl
Bon vous êtes pas obliger de raconter votre vie comme je le fais, mais si votre script est conséquent c'est toujours bien de faire un truc informatif, la longueur des tabulation et l'encodage ça aide vraiment les gens qui vous relisent, alors si vous connaissez ces infos hésitez pas à les mettre. Bon ceci fait passons à un autre incontournable, j'ai nommé le namespace II - Avant de commencer à penser à coder (en préparant le café) Certaines personnes aiment bien nommer leurs procédure "script:action", outre le fait que ça fait un nom à rallonge, c'est pas très judicieux, en effet autant utiliser correctement les outils que nous avons à notre disposition. Pour rappel, voici la page du manuel sur les namespace Pour ça c'est très simple, il suffit de mettre son script entre : tcl
Et magie tout fonctionne ! Ça va être très pratique quand nous aborderont la désinstallation du script ![]() En attendant, il faut juste penser à inclure le chemin complet des commandes dans les bind, exemple : tcl
Si vous oubliez le [namespace current]:: ou le script:: ça risque pas de marcher, vous pouvez choisir l'un ou l'autre. Ma préférence va pour le [namespace current]:: ça facilite la vie si vous modifiez le nom du namespace. III - Pendant que vous commencez à coder (en buvant le café) Bon, vous aurrez remarqué que mes variable sont très étrangement préfixées d'un "s_" enigmatique. J'en arrive à une deuxième règle très importante à mes yeux puisqu'elle vous permet de remarque tout de suite l'erreur typique du débutant, à savoir appliquer des fonction de string sur des list et inversement. Le principe est simple, si votre variable est destinée à contenir une chaîne de caractère (string) préfixez là d'un "s_", si elle doit contenir une liste d'un "l_", un tableau (array) "a_" un entier (integer) "i_" ou un dictionnaire "d_", rien de très sorcier et ça améliore vraiment la lisibilité de vos sources, c'est toujours bien d'en parler quelque part au début de votre script, afin que les lecteurs comprennent l'astuce et puisse en bnéficier eux aussi ![]() Exemple : tcl
tcl
Bon j'ai la flemme de faire la suite donc ce sera pour plus tard, et puis j'ai fini mon café donc faut que j'aille m'en refaire. La suite portera sur la désinstallation propre des scripts et sur quelques truc sympa à faire avec les namespace. Après je consacrerais une petite partie sur les fonctions de traitement de chaîne et de liste. Ensuite je pense faire un petit tuto sur les dictionnaires parce que c'est le bien (à mort les tableau !) Et je terminerai peut être avec un putain de script d'exemple top moumoute pour voir comment on fait des API propres (ou pas). Sur ce bonne nuit. RE: [Tuto] Coder proprement un script en TCL - fedora - 22/03/2010 très bon tutos et très bonne initiative !! merci beaucoup RE: [Tuto] Coder proprement un script en TCL - Merwin - 23/03/2010 J'ajouterai quelques autres idées: - Ne pas utiliser de tabulation, mais des espaces (4 caractères c'est une bonne norme) - Ne pas trop commenter: les commentaires du genre: tcl
C'est pas vraiment utile. Aussi Mareo pour un soucis de visiblité, plutot que de tout incorporer dans le namespace, je préfère, personellement: tcl
Après, chacun ses gouts ! On attends la suite Mareo, à ton clavier ![]() RE: [Tuto] Coder proprement un script en TCL - Mareo - 23/03/2010 Comme quoi les goûts et les couleurs ![]() Perso je préfère les tabulations justement parce que c'est fait pour indenter. et je préfère inclure les définition des procs dans le namespace pour pas avoir à réécrire le nom du namespace à chaque fois (ce qui est assez chiant quand tu décide de changer le nom dudit namespace) sinon je plussoie fortement l'idée de mettre la version du script et son/ses auteurs dans des variables au tout début ! Ça permet à d'autres scripts de savoir si celui-ci est chargé ou pas. Sauf que moi j'aurai mis : tcl
Mais bon après hein :p La suite c'est pour demain :p RE: [Tuto] Coder proprement un script en TCL - heretoc - 23/03/2010 Tutorial super sympatique Mais (oui il faut des remarques pour avancer) comme la dit Merwin il y a XX possibilités de faire ce que tu a fait et je pense que cela serais judicieux d'ajouter a ton tutorial au moin un code alternatif afin de montrer toutes les possibilités du TCL. RE: [Tuto] Coder proprement un script en TCL - CrazyCat - 23/03/2010 Bon tutoriel, je l'intègrerai dans le wiki quand il sera fini. Ou bien Mareo peut le faire aussi, dans la FAQ et avec un lien depuis cette page RE: [Tuto] Coder proprement un script en TCL - Merwin - 23/03/2010 Le problèmles des tabulations c'est que tu sais pas combien de caractères ça représente. Ca change d'un éditeur à l'autre (4, 8, etc). Du coup autant chez toi tu dépasses pas la limite des 80 chars, autant un gars il va ouvrir avec un autre éditeur et il sera à plus de 80 chars. D'ou ma préférence pour les espaces ![]() RE: [Tuto] Coder proprement un script en TCL - Mareo - 23/03/2010 heretoc a écrit :Tutorial super sympatique Je n'ai pas pour prétention de remplacer les page de manuels, mais j'en tiendrais compte ![]() CrazyCat a écrit :Bon tutoriel, je l'intègrerai dans le wiki quand il sera fini. Ou bien Mareo peut le faire aussi, dans la FAQ et avec un lien depuis cette page J'avais prévu de wikifier le tuto quand il sera terminé ![]() Merwin a écrit :Le problèmles des tabulations c'est que tu sais pas combien de caractères ça représente. Ca change d'un éditeur à l'autre (4, 8, etc). Du coup autant chez toi tu dépasses pas la limite des 80 chars, autant un gars il va ouvrir avec un autre éditeur et il sera à plus de 80 chars. Le troll espace vs tabulations est vieux comme le monde, chacun ayant ses avantages et ses inconvénients \o Je te répondrais juste que la taille des tabulations est configurable dans tout bon éditeur qui se respecte :p RE: [Tuto] Coder proprement un script en TCL - Mareo - 23/03/2010 http://www.eggdrop.fr/Coder_proprement Voilà, j'y ai rajouté plus de truc sur le café et la partie sur les scripts qui se désinstallent tout seul (ou presque) Sentez vous libre de corriger les erreurs qui ont pu se glisser ![]() RE: [Tuto] Coder proprement un script en TCL - Mareo - 24/03/2010 J'ai rajouté une petite partie sur les 80 colonnes. Je pense rajouter un autre article sur les désinstallations propre de scripts, histoire de ne pas trop encombrer le tuto. (À moins que MenzAgitat ne s'y colle ![]() RE: [Tuto] Coder proprement un script en TCL - ZarTek - 09/06/2012 J'aime l'idée de légèrement typé ses codes. Enfin comme tout le monde j'aime voir clair quand je lis. Mareo, si je comprend bien et suis bien l'affaire.. J'ai une question ! Dans ton exemple tu utilise : Code : bind PUBM - "*" et dans l'autre exemple tu utilise switch : Code : switch -exact -nocase -- [lindex $s_msg 0] { Est que l'idée est de bind en PUBM et de gérer une liste de commande dans le switch dans l'idée a devoir unbind au uninstall le moins possible et rendre l'uninstall plus dynamique ? Ou c'est un pur hasard ? Parce que si je suis bien, il faut faire unbind de tout les bind realiser.. Mais si tu PUBM "*", tu récupère tout ce qui est dis et avec [lindex $s_msg 0] dans le pattern du switch tu doit verifier si la commande existe.. Vrai ? Si oui, j'ai une autre question... si tu as 50 scripts qui font du PUBM, ce n'est pas moins optimiser que d'avoir finalement des bindings sur les commandes exact ? RE: [Tuto] Coder proprement un script en TCL - Mareo - 09/06/2012 mcdeffice a écrit :Mareo, si je comprend bien et suis bien l'affaire.. J'ai une question ! L'idée était plus de donner un exemple où le « typage » explicite des variable permet de repérer plus facilement des erreurs courantes, je ne pense pas qu'il faille en déduire quoi que ce soit d'autre. ;p Mais parfois tu ne cherches pas à reconnaître une commande spécifique mais un motif particulier qui peut changer souvent au cours de l'execution du script, dans ce cas tu vas utiliser des constructions de ce genre. Dans un jeu de pendu, par exemple, tu peux vouloir tester si le texte qui passe sur le salon est lettre unique OU la réponse attendue. mcdeffice a écrit :Est que l'idée est de bind en PUBM et de gérer une liste de commande dans le switch dans l'idée a devoir unbind au uninstall le moins possible et rendre l'uninstall plus dynamique ? Je ne pense pas que ça rende la désinstallation plus dynamique, ça n'a jamais tué personne de mettre plein d'unbind. ![]() mcdeffice a écrit :Mais si tu PUBM "*", tu récupère tout ce qui est dis et avec [lindex $s_msg 0] dans le pattern du switch tu doit verifier si la commande existe.. Vrai ? Tout à fait. mcdeffice a écrit :Si oui, j'ai une autre question... si tu as 50 scripts qui font du PUBM, ce n'est pas moins optimiser que d'avoir finalement des bindings sur les commandes exact ? Oui, dans l'absolu c'est moins efficace, même je suis pas certain qu'en pratique ça se ressente tant que ça. Il est évident que si tu cherche à matcher une commande précise, il vaut mieux la binder directement que de s'imposer un niveau supplémentaire d'indirection avec un PUBM "*". RE: [Tuto] Coder proprement un script en TCL - ZarTek - 14/06/2012 Mareo a écrit : Une chose m'échappe dans l'exemple s_msg, si c'est composer de plusieurs strings c'est une liste ? et en general c'est le cas non ? Si je suis la logique nous sommes mieux de mettre l_msg au lieu de s_msg non? J'ai lu dans une doc ceci : Citation :Tcl/Tk permet de tout considérer comme une liste, par exemple:et dans l'exemple Mareo a écrit : Si s_msg est juste, et, que la fonction lindex est faux dans l'exemple. Que faut-il utiliser ? Au final quel est la correction que tu sous entend pour ton exemple ? RE: [Tuto] Coder proprement un script en TCL - CrazyCat - 25/07/2012 J'ai fait un petit ajout sur la page wiki, je retranscris ici: Conventions de nommage a écrit :Une chose essentielle lorsqu'on développe, c'est que le code soit lisible et auto-suffisant. Cela passe par la mise en page (indentations propres), les commentaires judicieux (ni trop, ni trop peu) et un bon nommage de toutes les procédures et variables. RE: [Tuto] Coder proprement un script en TCL - aliasangelius - 25/07/2012 Merci pour le tuto ![]() Je comprend mieux certaines choses maintenant. Et l'explication en code et bien faite ! |