Вы находитесь на странице: 1из 10

Tcl (pronunciado /t.

quel/, originado del acrnimo


en ingls "Tool Command Language" o lenguaje de herramientas de comando,
actualmente se escribe como "Tcl" en lugar de "TCL"), es un lenguaje
de script creado por John Ousterhout, que ha sido concebido con
una sintaxis sencilla para facilitarse su aprendizaje, sin detrimento de la
funcionalidad y expresividad.
Se utiliza principalmente para el desarrollo rpido de prototipos, aplicaciones
"script", interfaces grficas y pruebas. La combinacin de Tcl con Tk (del
ingls Tool Kit) es conocida como Tcl/Tk, y se utiliza para la creacin de
interfaces grficas.

Tcl es un lenguaje interpretado, y su cdigo puede ser creado y modificado


dinmicamente. Sus reglas sintcticasson extremadamente simples y posee
reglas de alcance dinmico. Permite escribir cdigo fcil de mantener. Los
"scripts" Tcl son a menudo ms compactos y legibles que los programas
funcionalmente equivalentes en otros lenguajes de programacin. Es un lenguaje
multiplataforma, con intrpretes que se ejecutan
sobre Windows, Linux,UNIX, MacOS y OSX e incluso microprocesadores PIC.
Todos los elementos de un programa son comandos, incluyendo las estructuras
del lenguaje. Dichos comandos se escriben en notacin polaca y pueden ser
redefinidos o sobreescritos de manera dinmica.
Una caracterstica notable es que los datos son manejados como cadenas de
caracteres Unicode, incluyendo el cdigo fuente, soportando Unicode desde el
lanzamiento de la versin 8.1, en el ao 1999.
Una de las caractersticas ms usadas de Tcl es su extensibilidad. Por ejemplo,
si una aplicacin requiere algo de funcionalidad no ofrecida por el Tcl estndar,
los nuevos comandos de Tcl pueden ser implementados usando el lenguaje C,
un integrado sumamente fcil. Tcl es "extensible" a travs de C, C++ y Java.
Mediante una extensin, permite la programacin orientada a objetos. Puede
extenderse tambin a entornos grficos, a travs de una interfaz denominada Tk.
La programacin orientada a eventos se realiza sobre "sockets" y archivos,
adems son posibles los eventos basados en tiempo y los definidos por el
usuario.

Antecedentes

Ejemplo de un men realizado con Tcl/Tk.

El lenguaje Tcl fue originalmente proyectado para ser un lenguaje de comando


reutilizable. Quienes desarrollaron Tcl estaban creando una serie de
herramientas interactivas, y cada una constaba de su propio lenguaje de

comando. Desde que comenzaron a interesarse ms en estas herramientas que


en los lenguajes de comandos que utilizaran, estos lenguajes comenzaron a
construirse rpidamente sin considerar el diseo apropiado, sin mucha
importancia.
Despus de implementar varios lenguajes de comandos creados de esta forma
y experimentar problemas con cada uno de ellos, decidieron concentrar su
atencin en la implementacin de un objetivo general: un lenguaje de
comando eficaz que pudiera ser integrado fcilmente en nuevas aplicaciones.
Es de esta manera que nace el lenguaje Tcl (Tool Command Language), cuyas
siglas en Ingls significan Lenguaje de Herramientas de Comando.
Desde ese entonces, el lenguaje Tcl ha sido utilizado como lenguaje de cdigo.
En muchos casos, Tcl es usado en combinacin con la biblioteca Tk ("Tool Kit"),
un conjunto de comandos y procedimientos que hacen relativamente fcil para
programar interfaces de usuario grficas.
Desde que Tcl comenz a ser un lenguaje fcilmente extensible, se han escrito
muchas extensiones para tareas determinadas, y estn generalmente
disponibles libremente en Internet.

Sintaxis y semntica fundamental


Un script Tcl consiste de varias invocaciones de comandos. Una invocacin de
un comando es una lista de palabras separadas por un espacio y terminada en
un carcter de nueva lnea o un punto y coma.
palabra0 palabra1 palabra2 ... palabraN
La primera palabra es el nombre de un comando, el cual no est dentro del
lenguaje, sino en una biblioteca. Las siguientes palabras son los argumentos.
As se tiene:
nombreComando argumento1 argumento2 ... argumentoN
Un ejemplo prctico, usando el comando puts el cual enva una cadena de
caracteres a una salida (aadiendo una nueva lnea al final) en forma
predeterminada sobre el canal stdout:
puts "Hola, mundo!"
Las variables y los resultados de otros comandos pueden introducirse tambin
dentro de las cadenas de caracteres, tal como en este ejemplo donde
usamos set(comando de asignacin de variables) y expr (comando de
expresiones artimticas) para almacenar el resultado de un clculo en una
variable, y puts para imprimir el resultado junto con un texto explicativo:

set suma [expr {1+2+3+4+5}] ;#asigna a la variable suma el resultado de


la evaluacin de la expresin aritmtica 1+2+3+4+5
puts "La suma de los nmeros 1..5 es $suma." ;#muestra una cadena de
caracteres con el resultado almacenado en la variable suma
El punto y coma ; sirve para poner dos o ms comandos en una misma lnea, o
para agregar un comentario despus de un comando (un comentario se
empieza con el smbolo # ):
#Comentario en una lnea sin comandos
puts "Hola Mundo!" ; puts "otra lnea de caracteres"
set i 0; #Comentario, con un ';' para separarlo del comando

Agrupamiento
Las formas de agrupar elementos en Tcl son:
Con "" (bloques entre dobles comillas) se representan cadenas con el
agregado de que se puede intercalar el valor de variables (sustituye el
contenido de la variable) utilizando el smbolo $ seguido del nombre de la
variable.
Con {} (bloques entre llaves) pueden contener cadenas, pero no se pueden
intercalar variables como en el caso de las doble comillas, por ejemplo, en una
consola tcl (invocando tclsh en un terminal):
% set numero 545 ;#Asignacin a la variable numero con 545
545
% puts "El valor es $numero" ;# Con dobles comillas podemos poner el
contenido de la variable numero
El valor es 545
% puts {El valor es $numero} ;# Pero entre llaves muestra el simbolo $
seguido del nombre de la variable
El valor es $numero
Los bloques entre llaves sirven adems para las estructuras de control, ya que
son tratadas como cualquier otro comando.
Los () (parntesis) sirven para encerrar los ndices en las tablas asociativas, o
para agrupar en expresiones aritmticas.

Con [] (bloques entre corchetes) se realiza la sustitucin del contenido de un


resultado, por ejemplo, en una consola tcl:
% puts [ expr {1 + [set u 342]} ] ; # Muestra el resultado de la expresin de
sumarle 1 a la variable u que se le asigna antes 342
343
% puts $u ;# Muestra el contenido de u 342

Tipos de variables
Las variables no tienen tipos explcitamente. Sin embargo podemos definir seis
tipos
Booleanas : 0/no/off (en caso de ser falso) y 1/yes/on/ (en caso de ser
verdadero) o un nmero diferente de 0
Nmeros : 1 0 3.14 1.e-10, se tratan como cadenas, salvo en expresiones
aritmticas en que se convierte primero en binario.
Cadenas de caracteres : Bienvenido, "Madame De Labas", 32 , {z 3.14}
Listas : de booleanas, nombres, cadenas o listas (pudiendo anidar listas)
Diccionarios : Son pares clave-valor, similares a las tablas asociativas. Pueden
contener cualquier tipo de dato en el valor. Este tipo de variables se incluye
desde Tcl 8.5 en adelante.
Tablas asociativas : T(clave) M(2,3) que puedan contener los 5 tipos
anteriores, incluso mezclados.
Las cinco primeros tipos son llamados tipos escalares, as que pueden ser
pasados por valor y regresar al llamar a un procedimiento. Los tipos de escalar
se convierten automticamente en el tipo adecuado, por ejemplo, una cadena
puede ser una lista como se ve a continuacin utilizando una consola tcl:
% set frutas albaricoque
% puts $frutas
albaricoque
% set frutas "pomelo naranja banana"
pomelo naranja banana
% puts [lindex $frutas end]

banana
% puts [lindex $frutas 1]
naranja
Una funcin puede devolver una cadena o una lista, pero no una tabla
asociativa ya que no es una variable escalar. Estos pueden ser pasados por
referencia. Los diccionarios se pueden utilizar como un parmetro de un
procedimiento, e incluso puede ser devuelto.

Estructuras de control
Contrariamente a lo que ocurre con otros lenguajes de programacin, las
palabras que se utilizan para las estructuras de control en Tcl no son palabras
reservadas con una sintaxis especial. "for", "if", "while" son procedimientos que
siguen la sintaxis habitual Tcl.
while { unaExpresionLogica } {
unCommando
unCommando
....
}
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

}
# no es necesario usar el comando list con valores fijos; esto es equivalente
foreach i {"youpii" "aujourd'hui" "il fait beau" "bravo !" "bravo !"} {
puts $i
} foreach a $listaA b $listaB c $listaC {
puts "$a $b $c"
}
foreach {x y} [list Sr Gaston Sra Jeanne Sr Robert Sra Raymonde] {
puts "$x $y"
}
set color azul
switch $color {
rojo { puts "FF0000" }
azul { puts "0000FF" }
verde { puts "00FF00" }
blanco { puts "FFFFFF" }
negro { puts "000000" }
default { puts "desconocido" }
}

Ejemplos
Factorial (estilo de programacin funcional):
proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}}
Hacer la suma de una lista de nmeros
Con un bucle foreach que sigue la lista :
set numeros {10 9 8 7 6 5 4 3 2 1}

set suma 0
foreach i $numeros {
set suma [expr {$suma + $i}]
}
O ms compacto utilizando el comando join en lugar del lazo con foreach :
set suma [expr [join $numeros +]]
Un operador es un caracter como cualquier otro, as que puede ser almacenado
en una variable:
set numeros {10 9 8 7 6 5 4 3 2 1}
foreach opr {+ * - /} {
set resultado [expr [join $numeros $opr]]
puts "El resultado para el operador $opr es $resultado"
}
Descarga de una pgina HTML
package require http
set tok [http::geturl http://mini.net/tcl/540]
puts [http::data $tok]
http::cleanup $tok
Desarrollo y ejecucin

Eclipse corriendo un programa Tcl que utiliza la extensn incr Tcl para la programacin
orientada a objetos.

En Linux y otras plataformas de derivados de Unix, el intrprete Tcl/Tk a


menudo se instala de manera predeterminada. Si este no es el caso,
normalmente es necesario instalar los paquetes correspondientes a la
distribucin o sino utilizar el cdigo fuente de Tcl y compilarlo para luego
proceder con su instalacin. Por otra parte, la ejecucin de un cdigo Tcl se
realiza escribiendo en el intrprete de comandos o consola:
$ tclsh archivo.tcl
Tambin se puede obtener una consola Tcl escribiendo en ella
solamente tclsh . Existen otras consolas para Tcl, como TkCon, que es un
intrprete mejorado escrito por Jeff Hobbs. La programacin de Tcl/Tk es
soportada por gran variedad de IDEs, tal como Eclipse a travs del proyecto
DLTK (Dynamic Languages Toolkit), que contiene plugins para compiladores de
lenguajes dinmicos Tcl, Ruby, Javascript y Python.
Programacin orientada a objetos
Tcl no contaba en sus orgenes con construcciones especficas en su sintaxis
para soportar el paradigma de la programacin orientada a objetos (POO). La
inclusin de la POO en Tcl fue un tema de discusin recurrente dentro de la
comunidad de usuarios de este lenguaje. Las opiniones estaban divididas
porque la POO no es el nico paradigma adaptable, por el deseo de conservar
compacto a TCL y por la gran variedad de adaptaciones posibles a los
conceptos de objetos. Por esta razn existen varias extensiones diferentes que
implementan la POO.
Pese a esto, desde la versin 8.6 cuenta nativamente en su ncleo con un
sistema bsico de orientacin a objetos basado en XOTcl, buscando unificar a
las dems extensiones.
Extens
in

Desarroll
ado con

Descripcin del modelado

XOTcl7

Definicin dinmica de clases, metaclases y mtodos con


introspeccin. Herencia simple y mltiple. Agregacin de
objetos dinmicos, clases anidadas, mixins, filtro
condicional, ranuras. Influido por CLOS, Smalltalk y Self.

incr Tcl

Basado en el modelo de C++. Herencia mltiple. Clases


privadas y pblicas.

OTcl

Definicin dinmica de clases, metaclases y mtodos


con introspeccin. Herencia simple y mltiple. Influido
por CLOS, Smalltalk ySelf.

Snit

Tcl

Utiliza el paradigma de objetos puro, a diferencia de


otras extensiones, no se basa en la herencia de
objetos, sino que trabaja con herencia a vnculos
elegidos. Un objeto trabaja con delegaciones.

Вам также может понравиться