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 Smile

Merci d'avance et bien à vous tous,

PC
Répondre Avertir
#2
juste pour donner un indice sur un des points évoqués :

Citation :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"
Répondre Avertir
#3
salut,

Citation :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)

Citation :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..

Citation :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

Citation :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 Wink
Répondre Avertir
#4
djkenny a écrit :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
Répondre
#5
djkenny a écrit :
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?
Répondre Avertir
#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 Wink
Répondre Avertir
#7
Citation :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 Wink
Répondre Avertir
#8
sinon pour le système de liste me semble que le site : ici
Répondre Avertir
#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()
Répondre Avertir
#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.
Répondre
#11
pchevee a écrit :
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 Wink
Répondre Avertir
#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 Wink ).

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 Wink
Répondre Avertir
#13
Merci à tous (et à toutes?) pour vos réponses
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté