|Portada|Blog|Space|

[Índice] > Tcl para el desarrollo rápido de aplicaciones

Es bien sabido que uno de los más importantes factores que promueven el
software libre es ni más ni menos que el aburrimiento, el cual al
mezclarse con la capacidad de gente creativa permite que salgan obras
muy interesantes.

Aburrimiento que nos llega a todos, por ejemplo a mi. Y es por esto que
decidí armar un programa muy simple para escribir en el celular usando
el teclado de mi computadora. Hacer este programa me llevó media hora
aproximadamente, a los hechos, mucho menos tiempo del que me tomó hacer
esta entrada en el blog.

Esto se debe más que nada al lenguaje que decidí usar: Tcl.

Es un muy interesante lenguaje, con características poco comunes.

  * Interpretado, pero que se compila a bytecode automáticamente en
    tiempo de ejecución.
  * Totalmente estructurado, no existe goto, ni es funcional, una de sus
    críticas importantes es que tiene un mal rendimiento en algoritmos
    recursivos.
  * Orientación a objetos opcional, muy completo, rápido, flexible y
    prolija es por ejemplo la extensión xotcl.
  * Sintaxis increíblemente simple basada en órdenes.
  * No hay dramas con la precedencia de operadores sencillamente porque
    no existen los operadores :)

La idea es la siguiente, el programa está formado por líneas donde cada
línea es una orden, se puede usar el ; para poner más de una orden por
línea. Y para continuar una misma orden en la siguiente se puede usar la
contrabarra o agrupar varias líneas con llaves.

por ejemplo:

  puts "Hola mundo"

o también:

  puts {
    Este texto es mucho más grande y largo
    y tiene varias líneas en una sola orden.
  }

Las ordenes están formadas por palabras separadas por espacios y también
se puede usar "" para agrupar texto de forma similar al {} también
permitiendo expandirse a varias líneas.

La primer palabra es el nombre del procedimiento a ejecutar.

Los procedimientos, son una lista de órdenes para poder ejecutar una vez
definidos. No se les pueden pasar parámetros por referencia, pero de
forma análoga a C lo que se puede hacer es pasar el nombre de la
variable a la cual nos referimos.

A su vez los procedimientos devuelven un valor que por extrañas razones
no puede ser un array.

Con el procedimiento proc podemos definir nuevos procedimientos,
ejemplo:

proc "Suma dos números." {Número1 Número2} {
  return [expr ${Número1} + ${Número2}]
}

Pero lo más importante del lenguaje es aprender a usar los corchetes,
sin los cuales el lenguaje sería totalmente inútil. Los corchetes
permiten obtener el resultado del procedimiento como si fuera un
argumento en donde se usa, de esta forma tener:

  puts "1 + 1 = [expr 1+1]"

sería equivalente a tener

  puts "1 + 1 = 2"

dado que expr 1+1 devuelve "2".

Para almacenar cosas en memoria ram se pueden usar los siguientes
mecanismos:

  * Arrays (que se implementan como diccionarios)

  * y Variables comunes (que se implementan automáticamente y de forma
    100% transparente como escalares, texto, listas, vectores o árboles,
    según como se use la variable)

Las arrays y las variables NO son intercambiables, excepto usando las
órdenes array get y array set.

Y de forma similar a muchos otros lenguajes poniendo $ antes del nombre
de la variable es que obtenemos su valor.

De esta forma es fácil hacer un programa que salude:

puts "Ingrese su nombre: "
gets stdin nombre
puts "Hola $nombre."

Como habrán visto, puts y gets son órdenes importantes del lenguaje.

Las órdenes que vienen en el lenguaje son:
  after append array auto_execok auto_execok auto_import auto_import
  auto_load auto_load auto_load_index auto_load_index auto_qualify
  auto_qualify binary break case catch cd clock close concat continue
  encoding eof error eval exec exit expr fblocked fconfigure fcopy file
  fileevent flush for foreach format gets glob global history history if
  incr info interp join lappend lindex linsert list llength load lrange
  lreplace lsearch lset lsort namespace open package pid proc puts pwd
  read regexp regsub rename return scan seek set socket source split
  string subst switch tclLog tclLog tell time trace unknown unset update
  uplevel upvar variable vwait while

de las cuales aprender las siguientes son cruciales para poder arrancar
a programar en Tcl:
  after array break catch continue exit expr for foreach gets if incr
  lindex list llength proc puts return set string switch while

Con eso aprendido después es recomendable profundizar en los siguientes
conceptos: focos de variables, espacios de nombres, manejo de archivos,
expresiones regulares, y sockets.

Finalmente vale la pena aprender Tk, que para mi gusto tiene algunas
cosas que dejan mucho que desear, pero bueno, también tiene sus
ventajas, y es realmente muy fácil.

Aprender Tcl/Tk entonces les puedo decir que no lleva más que un par de
días, y espero que con la introducción que dí en esta página les sirva
para arrancar.

A los usuarios de debian: apt-get install tcl8.4 tk8.4

y ya que estoy les paso el programa que hice (me llevó media hora)

cvs -d :pserver:anonymous@fideo.no-ip.info/repos checkout escribir

---------
Los documentos en este sitio se encuentran licenciados bajo la GFDL.
Ver comentarios: [Hay i comentarios]
Para agregar un comentario: agregue a la URL: ?do=show_comment_form (explicación)