Communauté sur les Eggdrops - Community about Eggdrops
Pleins de questions que je me pose - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Pleins de questions que je me pose (/showthread.php?tid=926)



Pleins de questions que je me pose - pchevee - 09/04/2011

Bonjour la communauté,

en tant que débutant en tcl (mais plus confirmé en d'autres langages) je me pose un certain nombre de questions dont je n'ai trouvé, soit pas de réponses du tout, soit qu'une réponse très partielle ou pas satisfaisante. Je me permets de vous les livrer un peu en vrac, merci aux âmes charitables qui voudront bien y répondre!

Questions concernant précisément la programmation d'eggdrops:

1) A quoi (à qui) se rapportent, lorsqu'on écrit bind pub "flags1|flags2" , le "flags1" et le "flags2"?

2) Quand vaut il mieux utiliser putserv, puthelp ou putquick?

Questions concernant le langage en général.

3) Quand on définit une procédure A, puis plus bas une procedure B , il m'a semblé que parfois on pouvait appeler Proc B depuis la proc A, et parfois pas. Quelle est la règle? En pascal, de mon jeune temps, les procedures étaient connues au fur et a mesure qu'on les définissait (quitte à les déclarer par le mot clé forward si on en avait besoin avant de les avoir définies), alors qu'en C ou en Perl on peut les définir dans n'importe quel ordre, ça n'a pas d'importance (en C il vaut mieux tout de même définir des prototypes de fonction). Qu'en est-il du tcl?

4) Quelle est la différence entre un tableau ordonné, une liste et une chaîne de caractères contenant des éléments séparés par des espaces? Ca, ce n'est vraiment pas clair.

Voila en gros c'est tout pour le moment, mais c'est déjà pas mal. Bien sûr ce n'est pas la peine de réinventer la roue, j'accepte les liens comme réponse, et même les liens en anglais :)

Merci d'avance et bien à vous tous,

PC


RE: Pleins de questions que je me pose - Indocom - 10/04/2011

juste pour donner un indice sur un des points évoqués :

Quote:2) Quand vaut il mieux utiliser putserv, puthelp ou putquick?
C'est une histoire de priorité et de la charge du serveur.
Si c'est vraiment important et pressé ou si c'est une info qui est donnée "juste comme ça"


RE: Pleins de questions que je me pose - djkenny - 10/04/2011

salut,

Quote:1) A quoi (à qui) se rapportent, lorsqu'on écrit bind pub "flags1|flags2" , le "flags1" et le "flags2"?
flags1 c'est le flag global
flags2 le flag local (limité au salon)

Quote:2) Quand vaut il mieux utiliser putserv, puthelp ou putquick?
tout dépand de l utilisation que tu en fais
par exemple putquick sera bien pour un kickban ou un mode (même si il existe pushmode)
putserv pour les actions plus classique comme les simples notices
et puthelp pour les actions qui nécessite beaucoup de lignes de réponses genre showcommande ou help etc..

Quote:3) Quand on définit une procédure A, puis plus bas une procedure B , il m'a semblé que parfois on pouvait appeler Proc B depuis la proc A, et parfois pas. Quelle est la règle? En pascal, de mon jeune temps, les procedures étaient connues au fur et a mesure qu'on les définissait (quitte à les déclarer par le mot clé forward si on en avait besoin avant de les avoir définies), alors qu'en C ou en Perl on peut les définir dans n'importe quel ordre, ça n'a pas d'importance (en C il vaut mieux tout de même définir des prototypes de fonction). Qu'en est-il du tcl?
en tcl tu peux appeler n'importe quelle procédures depuis n'importe ou (dans la limite ou elle a etait chagé) il suffi simplement de spécifier le bon nombre d'argument qui vont avec
exemple:

tcl
proc A {machin truc bidule} {return ok}
proc B {truc} {A x y z}
proc C {} {B 1}

en appelant C celle ci appel B avec l argument 1, qui a sont tour appel A avec les argument x, y et z ...etc

Quote:4) Quelle est la différence entre un tableau ordonné, une liste et une chaîne de caractères contenant des éléments séparés par des espaces? Ca, ce n'est vraiment pas clair.
bonne question tien, tcl ne fait pas vraiment de différence, il est capable de gérer un simple string avec des élément espacé comme une liste, toutefois il existe la commande array pour gérer les listes proprement.

manuel (partiel) en fr: http://wfr.tcl.tk/8
manuel en anglais: http://www.tcl.tk/man/tcl/
attention: ces manuels ne tiennent pas compte des commandes eggdrop, celles ci se trouvent dans le dossier doc de ton eggdrop dans le fichier tcl-commands.doc (au format txt) ou tcl-commands.html dans le dossier doc/html


RE: Pleins de questions que je me pose - CrazyCat - 10/04/2011

djkenny Wrote:attention: ces manuels ne tiennent pas compte des commandes eggdrop, celles ci se trouvent dans le dossier doc de ton eggdrop dans le fichier tcl-commands.doc (au format txt) ou tcl-commands.html dans le dossier doc/html
Ou sur http://wiki.eggdrop.fr/Tcl-commands


RE: Pleins de questions que je me pose - pchevee - 10/04/2011

djkenny Wrote:
tcl
proc A {machin truc bidule} {return ok}
proc B {truc} {A x y z}
proc C {} {B 1}

en appelant C celle ci appel B avec l argument 1, qui a sont tour appel A avec les argument x, y et z ...etc

Merci de l'information; donc ma question est: est-ce que A peut appeler C?


RE: Pleins de questions que je me pose - djkenny - 10/04/2011

biensur,

tcl
proc A {machin truc bidule} {return [C]}
proc C {} {return ok}

il faut biensur que le chargement soit fini, tu ne pourras pas appeler une procédure qui n'est pas encore chargé (comme dans n'importe quel langage)

édit: dans l'exemple précédant si tu appel C avec A tu créeras une boucle infini qui generera une erreur


RE: Pleins de questions que je me pose - djkenny - 10/04/2011

Quote:bonne question tien, tcl ne fait pas vraiment de différence, il est capable de gérer un simple string avec des élément espacé comme une liste, toutefois il existe la commande array pour gérer les listes proprement.
j'ai dit une bêtise la :s, array sert a gérer les tableaux et pas les listes, c'est la commande liste et les commandes commençant par L (lsort lindex lrange...)


RE: Pleins de questions que je me pose - aliasangelius - 10/04/2011

sinon pour le système de liste me semble que le site : ici


RE: Pleins de questions que je me pose - pchevee - 10/04/2011

Merci pour le lien Alias_angelius. Sinon pour reprendre l'affaire qui me tien à coeur, j'ai fait un test rapide:


tcl
proc A {} { return [C un deux trois] }
proc C { machin truc bidule} { puts "Je compte: [concat $machin $truc $bidule]" }
A

Ca marche


tcl
proc A {} { return [C un deux trois] }
A
proc C { machin truc bidule} { puts "Je compte: [concat $machin $truc $bidule]" }

Ca ne marche pas: l'interpréteur me met une erreur Invalid command name "C". C'est étonnant... Cela signifierait qu'on a tout intérêt à d'abord déclarer ses variables et ses procedures avant de les appeler
depuis le main()


RE: Pleins de questions que je me pose - CrazyCat - 10/04/2011

Bien sûr.
Le TCL est lu et interprété au fur et à mesure, donc les appels directs à des fonctions lors du chargement doivent être mis après la déclaration des fonctions.


RE: Pleins de questions que je me pose - djkenny - 10/04/2011

pchevee Wrote:
tcl
proc A {} { return [C un deux trois] }
A
proc C { machin truc bidule} { puts "Je compte: [concat $machin $truc $bidule]" }

Ca ne marche pas: l'interpréteur me met une erreur Invalid command name "C". C'est étonnant... Cela signifierait qu'on a tout intérêt à d'abord déclarer ses variables et ses procedures avant de les appeler
depuis le main()

c'est tout à fait normal, tu lui demande de lancer une procédure qui n'a pas encore été chargé.

en tcl la fonction main() n'éxiste pas et n'a pas d'équivalent.
mais pour reprendre la syntaxe de C si tu tente de lancer une fonction dans main() sans l avoir déclaré avant (en direct ou en prototype) tu auras la même erreur qu'en tcl.

tcl ne prend pas en charge les prototypes non plus du fait que se soit un langage scripté et non un langage compilé


RE: Pleins de questions que je me pose - TsT - 10/04/2011

Bonjour pchevee,

L'avantage du tcl est qu'il convertit tout a la volée. Il n'y a pas vraiment de type de données.
L'inconvenient c'est qu'on peux faire des choses horriblement moches qui fonctionnent quand meme par miracle (suffit de regarder la plus part des scripts pour eggdrop ;) ).

Si tu veux programmer correctement, la difficulté est de bien faire les conversions entre strings et listes en fonction de ce qu'on besoin les fonctions qui les traitent.

Par exemple la plus part des fonctions commencant par l (lindex lrange lsort) font des traitements sur une liste.
Et il y a quelques pièges comme par exemple lindex qui te retournera un element (la plus part du temps un string) alors que lrange te retrounera une liste (composé de 0, 1 ou n elements)

Bon courage ;)


RE: Pleins de questions que je me pose - pchevee - 11/04/2011

Merci à tous (et à toutes?) pour vos réponses