Langage tcl › Les variables

En Tcl, les variables sont non typées, et peuvent être, suivant le cas, considérées comme chaînes de caractères (le cas le plus large), listes (ensemble ordonné d'éléments non typés qui peuvent aussi être eux mêmes des listes), entiers ou flottants. Elles peuvent aussi être des tableaux à une ou plusieurs dimensions. Une même variable peut être considérée de types différents suivant l'opération que l'on fait sur elle.

Voici 4 types de varialbes expliquées :

Les variables simples

L'accès à une variable nom_variable se fait par $nom_variable. L'affectation se fait par la commande set.

Par exemple :

% set a 12
#la variable a reçoit "12"
% puts a
#affichage du caractère "a"
a
% puts $a
#affichage du contenu de la variable a
12
% set a b
#la variable a reçoit la lettre "b"
% set b iletaitunebergere #la variable b reçoit la chaîne "iletaitunebergere"
% puts $a
#affichage de la valeur de a
b
% puts $b
#affichage de la valeur de b
iletaitunebergere
% puts [subst $$a]
#affichage de la valeur de la variable contenue dans la variable a,
iletaitunebergere
#la fonction subst force l'évaluation le plus loin possible des
#variables. L'emploie des crochets sera expliqué plus loin

Il existe de Chaînes de caractères pouvant contenir des espaces:

% set toto il etait une bergere
#utilisation de la fonction set avec trop d'arguments
wrong # args: should be "set varName ?newValue?"
% set toto "il etait une bergere"
#utilisation correcte de set
% set toto {il etait une bergere}
#autre utilisation correcte de set
% set a bergere
% set toto "il etait une $a"
% puts $toto
il etait une bergere
% set toto {il etait une $a}
% puts $toto
il etait une $a

 

Les guillemets permettent l'utilisation de caractères blancs dans une chaîne, les accolades aussi, mais celles-ci interdisent l'évaluation des variables éventuelles contenues
dans la chaîne.


Il est aussi possible d'utiliser des espaces dans une chaîne de caractères en les faisant précéder d'un anti-slash. Celui-ci permet de considérer le caractère qui le suit comme un
caractère normal.

% set toto il\ etait\ une\ $a
% puts $toto
il etait une bergere

Ainsi si une chaîne de caractères doit contenir des guillemets ou des accolades:

% set toto \{il\ etait\"\ une\nbergere # \n force un retour chariot
% puts $toto
{il etait" une
bergere

Remarque: la concaténation de chaînes peut se faire de manière automatique:

% set Aut "un aut"
% set Re re
% set toto "un train peut en cacher $Aut$Re"
un train peut en cacher un autre

 

Les listes

Tcl/Tk permet de tout considérer comme une liste, par exemple:

set toto "il etait une bergere"
llength $toto
#fonction retournant le nombre d'éléments de la
#liste en argument

le résultat de ce code est : 4

Il est possible de construire explicitement des listes par l'utilisation du constructeur list ou par
l'utilisation d'accolades:

% set toto {il {etait une bergere}}
#liste contenant deux éléments
% puts $toto
il {etait une bergere}
% llength $toto
#nombre d'éléments de la liste
2
% llength [lindex $toto 1]
#nombre d'éléments du deuxième élément de la
#liste: celles-ci sont indexées à partir de 0
3
% set toto [list il [list etait une bergere]] #donne le même résultat qu'en utilisant les
#accolades. Cependant, permet l'utilisation
#de variables dans la fabrication de la liste,
# ce que les accolades empêchent.

 

La fonction la plus intéressante pour le parcours de liste est foreach, qui permet 'd'effectuer un ensemble de commandes sur (ou a partir de) l'ensemble des éléments d'une liste:

%set maliste "Il etait une bergere"
%foreach mot $maliste {
puts $mot
}
Il
etait
une
bergere

 

La propriété intéressante de foreach est qu'elle permet de traiter les éléments de l'ensemble par couple, triplet, etc...

%foreach {motimpair motpair} $maliste {
puts $motpair
#seul un mot sur deux est affiché
}
etait
bergere

 

 

Les entiers et les flottants

 Comme Tcl/Tk considère que tout est chaîne de caractères, il est nécessaire de lui spécifier qu'une opération arithmétique est désirée:

% set a 23+12
23+12
% set a [expr 23+12]
35
#utilisation de la fonction expr pour des calculs arithmétiques

La différence entre entiers et flottants se fait de manière implicite suivant le type des opérandes:

% expr 23/3
7
% expr 23.0/3
7.66667
#calcul entier car les deux arguments sont des entiers
#un des arguments est un réel => calcul flottant

 

 

Les tableaux

Les tableaux sont des variables possédant des entrées:

% set tableau(oncle) Tom
% puts $tableau(oncle)
Tom
% set i oncle
% puts $tableau($i)
#l'entrée oncle du tableau reçoit la chaîne "Tom"
#référence au contenu d'une variable de type tableau
#encore une référence, mais cette fois ci par une
#variable

On peut aussi créer des tableaux à plusieurs dimensions, dans ce cas les noms d’entrées sont séparés par des virgules :

% set tab2(case,enpaille) oncle
% puts $tableau($tab2(case,enpaille))

#l'entrée référencée par case et enpaille reçoit
#"oncle"
#affichage de l'entrée oncle de tableau Tom

 

Limitation: une variable de type tableau ne peut pas être créée dans une variable autre et vice-versa:

% set toto 12
#toto est donc connu par l'interpréteur comme une variable chaîne
% set toto(a) 10
#assignation incorrecte
can't set "toto(a)": variable isn't array
% unset toto
#le contenu de la variable est libéré, de plus la variable toto est "oubliée"
% set toto(a) 10
#assignation maintenant correcte car toto est une nouvelle variable

 

 

 

 

Retour au sommaire langage Tcl