B Structures de programme

      1Conditionnelles:

Une conditionnelle s'écrit sous la forme:

if condition bloc

ou bien

if condition bloc1 else bloc2

ou bien

if condition bloc1 elseif condition2 bloc2 ... else bloc n

Remarque importante: cette instruction s'écrit sur la même ligne, on ne peut insérer des sauts de lignes qu'à l'intérieur des accolades, ainsi:

% set a 4
% if {$a > 0} {
puts $a} #incorrect car le else n'est pas sur la même ligne que le bloc
else {puts -$a}

Conseil: toujours écrire les tests sous la forme suivante:

if {condition} {
bloc
} else {
bloc
}

La condition doit, contrairement au C, être un "vrai" booléen (0 pour faux ou 1 pour vrai). Si la condition est composée de plus d'une opération arithmétique, il faut la mettre sous la forme [expr condition] qui force une évaluation mathématique et/ou booléenne de la condition.

Attention, les opérations mathématiques sont interdites sur les chaînes de caractères, en particulier il faut remplacer:

$chaîne1 == $chaîne2

par

[string compare $chaîne1 $chaîne2]==0.

string compare est une fonction qui renvoie 0 si les deux chaînes comparées sont identiques. La bibliothèque string regroupe un nombre appréciable de commandes de traitement de chaînes de caractères.

      2 Boucle "pour":

Un boucle "pour" s'écrit sous la forme:

for initialisation condition incrémentation bloc

De la même manière que les tests, une boucle "pour" s'écrit sur une même ligne, il ne peut y avoir des sauts de ligne qu'à l'intérieur d'accolades.

Exemple d'utilisation de la boucle pour:

% for {set i 1} {$i<=10} {incr i} {
puts $i
}

Conseil d'écriture de la boucle pour:

for {initialisations} {condition} {incrémentations} {
bloc
}

      3 Boucle "tant que":

Une boucle "tant que" s'écrit sous la forme:

while condition bloc

Comme toute instruction Tcl/Tk, cette commande s'écrit sur la même ligne. Ainsi on ne peut mettre des sauts de lignes que dans des blocs délimités par des accolades:

Exemple d'utilisation:

% set a 1
% while {$a>0} {
puts $a
incr a -1 #décrémentation de a
}

Conseil d'écriture d'une boucle "tant que":

while {condition} {
bloc
}

      4 Branchement à choix multiples:

Le branchement à choix multiples s'écrit de la manière suivante:

switch chaîne modèle1 bloc1 ... modèlen blocn

ou bien

switch chaîne modèle1 bloc1 ... modèlen blocn default blocdefault

avec blocdefault qui est exécuté si aucun modèle ne correspond à la chaîne.

Exemple:

% switch $a {
toto {puts "c' est toto"}
titi {puts "c'est titi"}
default {puts "je ne le connais pas"}
}

Conseil d'écriture:

switch chaîne {
modèle1 {
bloc1
}
modèle2 {
bloc2
}
...
}