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
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]
.
Les variables ne sont pas typées explicitement. On peut néanmoins en définir cinq :
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 :
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.
% 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
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.
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é.
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" } }