Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Pleins de questions que je me pose
#1
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
#2
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"
#3
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
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#4
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
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#5
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?
#6
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
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#7
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...)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#8
sinon pour le système de liste me semble que le site : ici
#9
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()
#10
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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#11
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é
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#12
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 ;)
#13
Merci à tous (et à toutes?) pour vos réponses


Possibly Related Threads…
Thread Author Replies Views Last Post
  Modifier le script du trivia pour défiler les questions dans l'ordre Mimisth 2 3,468 05/12/2015, 19:45
Last Post: MisterS
  [Demande] attendre que l'egg soit posé pour activer un tcl precis cestlemien 6 5,774 11/06/2014, 13:24
Last Post: CrazyCat
  Questions sur les fichiers de configuration CrazyCat 11 5,681 17/10/2011, 22:39
Last Post: CrazyCat
  Trivia des questions kipof 10 6,142 28/11/2009, 00:44
Last Post: kipof

Forum Jump:


Users browsing this thread: 1 Guest(s)