Original in en Brent B. Welch
en to de:Harald Radke
Für eine Scriptsprache besitzt Tcl eine vergleichsweise einfache Syntax.
cmd arg arg arg
$foo
foo
verwendet.
[clock seconds]
[clock seconds]
die gegenwärtige Zeit
in Sekunden ausgegeben.
"some stuff"
{some stuff}
\
\n
(Zeilenumbruch)
verwendet. Desweiteren unterdrükt er die Auswertung von Dollarzeichen, Anführungszeichen,
eckigen und geschweiften Klammern.
Das folgende Tcl Kommando gibt die aktuelle Zeit aus. Es werden drei Tcl
Befehle verwendet:
set
, clock
und puts
.
Der Befehl set
weist der Variablen ihren Wert zu. Mit dem clock
Befehl
werden Zeitwerte manipuliert. Zum Schluss gibt der Befehl puts
einen String und den Wert der Variable aus.
set seconds [clock seconds] puts "Aktuelle Zeit: [clock format $seconds]"
Note that you do not use $ when assigning to a variable.
Man beachte, dass das Dollarzeichen nur bei der Verwendung des Wertes einer
Variable, nicht aber bei deren Zuweisung benutzt wird.
Eigentlich ist die Variable seconds
in diesem Beispiel gar nicht notwendig,
die gegenwärtige Zeit kann auch wie folgt ausgegeben werden:
puts "Aktuelle Zeit: [clock format [clock seconds]]"
Der Tcl Parser durchläft, gesteuert durch die Syntax, drei Phasen: Anordnung der Argumente, Substitution der Ergebnisse und Ausführung der mit dem Befehl verbundenen Routine.
puts
Befehles
zu übergeben.
$foo
durch den Wert der
Variable foo
ersetzt und geklammerte Befehle durch ihre Ergebnisse
ersetzt. Diese Reihenfolge, erst die Anordnung der Argumente und erst danach die
Auswertung, ist sehr wichtig, da so die Struktur von Kommandos auch durch
ungewöhnliche Werte nicht komplizierter wird.
Hier ein weiteres Beispiel:
Hier werden geschweifte Klammern für die Anordnung von Argumenten verwendet, ohne dass irgendeine Auswertung stattfindet. Der Tcl Parser behandelt denset i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }
while
wie jedes andere Kommando
auch, ohne ihn speziell zu behandeln.
Die Implementierung des while
commandos ist es, die
weiss, dass das erste Argument ein Ausdruck und das zweite Argument
eine Folge von weiteren Tcl Kommandos ist.
Die Klammern bilden zwei Argumente: einen boolschen Ausdruck, welcher
die Schleife steuert und die Kommandos im Schleifenrumpf.
Hier sind zwei mathematische Ausdrücke zu sehen: ein boolscher Vergleich und
eine Multiplikation.
Der while
Befehl wertet automatisch sein erstes Argument als einen
Ausdruck aus.
Sollen hingegen mathematische Berechnungen ausgeführt werden, so muss explizit
der Befehl expr
benutzt werden.
Im Endeffekt lässt Tcl jemand anderen die richtige Arbeit machen.
Es wurde gezeigt, dass Tcl expr
für die Auswertung mathematischer
Ausdrücke, puts
für die Ausgabe und set
für
die Zuweisung von Variablen verwendet.
Diese Tcl Befehle werden durch C Prozeduren realisiert, welche bei Tcl registriert
sind. Die C Prozeduren übernehmen die Zeichenkettenargumente des Tcl Befehles
und geben eine neue Zeichenkette als Ergebnis zurück.
Es ist recht einfach, eigene C Befehlsprozeduren für jeden Aufgabenbereich zu erstellen,
sei es für den Zugriff auf Datenbanken oder ein grafisches Benutzerinterface.
Tcl selbst, die Sprache also, hat keine Ahnung, was die Kommandos bewirken. Sie
ordnet lediglich Argumente an, substituiert Ergebnisse und wertet Befehle aus.
Eine Prozedur für die Berechnung der Fakultät:
proc fac {x} { if {$x < 0} { error "Ungültiges Argument $x: muss ein positiver Integer Wert sein" } elseif {$x <= 1} { return 1 } else { return [expr $x * [fac [expr $x-1]]] } }