Catégorie:Langage Tcl

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

Shell

Syntaxe et sémantique

La syntaxe suit le modèle d'un shell. 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.

  • Les {} peuvent jouer le même rôle (sans interprétation des variables) sauf dans certains cas.
  • Les {
  • Les [] délimitent les fonctions.
  • Les () indiquent les indices des tableaux.

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.

Type des variables

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

  • Les booléens : 0/no/off (faux) et 1/yes/on/ (vrai) ou un nombre différent de 0
  • 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.


% set fruits "pomme orange banane"
% puts [lindex $fruits end]
  banane
  • 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 valeurs booléennes sont 0 (faux) ou non 0 (vrai)
  • 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.
  • 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

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" }
  }