Tool Command Language - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Syntaxe et sémantique

La syntaxe suit le modèle d'un shell, avec quelques simplifications par rapport à des langages comme perl ou ksh. Un script de Tcl contient une ou plusieurs commandes. Une commande se compose de un ou plusieurs mots, qui sont séparés par des espaces.

      mot0 mot1 mot2 mot3 ... motN      
  • Les "" servent à grouper plusieurs mots, et ils seront considérés comme un seul mot (s'il y a des références parmi ces mots ils seront interprétés (substitués)).
  • Les {} peuvent jouer le même rôle (sans interprétation des variables) sauf dans certains cas.
  • Les [] délimitent des appels de fonctions dont on veut connaître le résultat.
  • Les () indiquent les indices des tableaux T(38) est l'équivalent de T[38] en langage C. Elles peuvent aussi permettre d'ordonner les calculs dans le cas d'expressions mathématiques.

Le premier mot est le nom de la commande. Les mots suivants sont les paramètres.

      nomDeLaCommande par1 par2 par3 ...parN      

Au lieu d'un paramètre, on peut mettre entre crochets [ ... ] une autre commande. Celle-ci est interprétée en premier et le résultat devient le paramètre de la commande supérieure. Entre accolades { ... } on peut mettre comme paramètre une séquence de mots qui n'est pas interprétée, mais utilisée directement. Les transferts de paramètres se font par valeur. La transmission par référence se fait sans mettre $ devant le nom de la variable, et par la commande upvar dans le corps de la procédure appelée. Les constantes ou chaînes de caractères sont indiquées telles quelles. Les commentaires s'écrivent après la commande # (qui est une commande comme les autres mais qui ne fait rien).

L'affectation se fait par l'instruction set, qui au passage retourne la valeur.

      % set a 38      38      

La valeur d'une variable s'obtient par [set a]. Remarquons que $a n'est qu'un raccourci d'écriture de [set a].

D'autres exemples de syntaxe :

      % set s [Somme $a 38]; # a, transmis par valeur, ne peut être modifié      ...      % MiseAjour listeA $x $y; # listeA, transmis par référence, est modifié par MiseAJour      ...      

La notation usuelle x=f(y) s'écrit en Tcl set x [f $y].

Type des variables

Généralités

Les variables ne sont pas typées explicitement. On peut néanmoins en définir cinq :

  • Les booléens : 0/false/no/n/off (faux) d'une part et 1/true/yes/y/on/ (vrai) ou un nombre différent de 0 d'autre part,
  • les nombres : 1 0 3.14 1.e-10,
  • les chaînes de caractères : Bonjour, "Madame De Labas", 32 , {z 3.14},
  • les listes : de booléens, nombres, chaînes ou listes (on peut imbriquer les listes),
  • les tableaux associatifs : T(clef) M(2,3) qui peuvent contenir les 4 types précédents, même mélangés.

Les quatre premiers types sont dits types scalaires, ils peuvent donc être passés par valeur et retournés à l'appel d'une procédure. Ces types scalaires sont convertis automatiquement dans le type adéquat, par exemple, une chaîne de caractères peut devenir une liste :

      % set fruits abricot      % puts $fruits        abricot      % set fruits "pomme orange banane"      % puts [lindex $fruits end]        banane      

Une fonction peut retourner une chaîne ou une liste, mais pas un tableau qui n'est pas une variable scalaire. Ceux-ci peuvent toutefois être transmis par référence. Les dictionnaires (nouveauté de la version 8.5) sont un nouveau type scalaire, pouvant donc être fournis comme paramètre d'une procédure, et même retournés.

Booléens

      % foreach bool [list 0 1 2 false true no yes n y] {if $bool {puts "$bool => true"} else {puts "$bool => false"}}      0 => false      1 => true      2 => true      false => false      true => true      no => false      yes => true      n => false      y => true      

Nombres

Les nombres sont traités comme des chaînes de caractères sauf dans les expressions arithmétiques où ils sont d'abord convertis en binaire.

Tableaux associatifs

Les tableaux associatifs clé-valeur implémentent un type table de hachage sont très rapides et peuvent être très grands. Une clé, indice du tableau, peut être une chaîne de caractères ou une liste, sans limite de taille. On peut, par exemple, utiliser un texte de 10000 lignes comme clé.

Structures de contrôle

Contrairement à ce qui se passe pour d'autres langages, les mots qui servent aux structures de contrôles en Tcl ne sont pas des mots réservés avec une syntaxe spéciale. "for", "if", "while" sont des procédures qui obéissent à la syntaxe Tcl habituelle.

        while { uneExpressionLogique }   {             uneCommande            uneCommande            ....        }               if {$x<0} {           set x 0        } elseif { $x<5 } {           set x 5        } else {           set x 10        }               for {set i 0} {$i<10} {incr i} {             puts $i         }               foreach i [list "youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"] {            puts $i        }               foreach a $listeA  b $listeB  c $listeC {            puts "$a $b $c"        }               foreach {x y} [list M Gaston Mlle Jeanne  M Robert Mme Raymonde] {            puts "$x $y"        }               set couleur bleu        switch $couleur {          rouge { puts "FF0000" }          bleu  { puts "0000FF" }          vert  { puts "00FF00" }          blanc { puts "FFFFFF" }          noir  { puts "000000" }          default { puts "inconnu" }        }      
Page générée en 0.110 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise