Tcl est facile à apprendre, surtout pour un habitué du langage C ou quelqu'un qui connaît un shell. Bien que la syntaxe semble dans un premier abord assez similaire au C, en vérité elle est beaucoup plus simple. Le langage a également des aspects communs avec Lisp et Forth. Il permet de développer très rapidement des logiciels de petite ou moyenne taille. De plus, il est facile d'intégrer différents autres logiciels avec une IHM en Tcl/Tk.
Tcl est surtout connu pour son extension graphique Tk. Tcl/Tk permet de concevoir des applications fenêtrées indépendamment de la plateforme (UNIX / Mac OS / Windows) à la manière du langage Java.
Tcl étant un langage interprété, le développement d'un programme est rapide et peut s'effectuer par touches successives. Cette méthode de travail correspond à un cycle de développement en cascade.
Tcl facilite l'accès aux fonctions de son interprète, ce qui contribue à la puissance du langage et le place à mi-chemin entre un langage fonctionnel comme Lisp et un langage impératif comme BASIC.
Tcl est intégré ou embarqué avec de nombreuses applications grâce à sa syntaxe simple (par exemple, Oracle). L'une de ses forces est la réalisation aisée d'une suite de tests unitaires pour une application donnée. La réalisation aisée de tests de validation rend le développement incrémental très facile (à la manière de Forth).
Tcl est un langage extrêmement simple, et très puissant. C'est précisément ce qui lui permet d'exécuter du code qu'un compilateur, ou un autre interpréteur refuserait... et de donner un résultat bien différent de celui auquel le développeur s'attendait. Les sites consacrés au développement sous Tcl [réf. souhaitée] donnent des conseils aux développeurs débutants pour qu'ils prennent de bonnes habitudes.
Se souvenir qu'un nom de variable ne s'écrit pas différemment d'un littéral.
% puts x x % set x a a % puts "x $x" x a % puts 0 0 % set 0 1 1 % puts $0 1
Les substitutions peuvent donner des résultats surprenants.
% set x 1 1 % set y x x % set $y 2; #Equivaut à set x 2 2 % puts $x 2
Il n'y a pas de différence entre le code et les données, en ce sens qu'une chaîne de caractères quelconque peut devenir du code. Là encore, attention au jeu des substitutions.
set i 0; set cond1 "$i<5"; #! Attention, cond1 est déjà égal à la chaîne "0<5" set cond2 {$i<5}; #! Ici, il n'y a pas de substitution, cond2 est égal à "$i<5" set incre {set i [expr $i+1]; puts $i} while $cond2 $incre; # Cette boucle s'exécute 5 fois. set i 0; while $cond1 $incre; # Cette boucle ne se termine jamais.
proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}}
Avec une boucle foreach parcourant la liste :
set nombres {10 9 8 7 6 5 4 3 2 1} set somme 0 foreach i $nombres { set somme [expr {$somme + $i}] }
Ou en plus compact en utilisant la commande join
:
set somme [expr [join $nombres +]]
Remarquons qu'un opérateur est un caractère comme un autre, il peut donc être stocké dans une variable :
foreach op {+ * - /} { set resultat [expr [join $nombres $op]] puts "Le résultat pour l'opérateur $op vaut $resultat" }
string
:set sequence "ACGTATTACGGTCCATGAACGAATTGGGATATCGACCATGATGGAATTCTG" puts [string map {GA R TC Y GT K AC M GC S AT W} $sequence]
Ensuite donner la fréquence d'apparition des lettres (A, C, T, G) dans la séquence en utilisant un tableau associatif (array
), la commande split
pour isoler chaque motif et la commande d'introspection (info
) de l'interprète :
foreach nucleotide [split $sequence ""] { if ![info exists compte($nucleotide)] { set compte($nucleotide) 1 } else {incr compte($nucleotide)} } foreach nucleotide [array names compte] { puts "$nucleotide -> $compte($nucleotide)" }
package require http puts [http::data [http::geturl http://mini.net/tcl/540]]