Para lograr darle al programa un cierto grado de "lógica", es necesario indicarle acciones a realizar dependiendo de determinados eventos, por ejemplo, podríamos necesitar un programa que muestre el resultado de una operación en la pantalla siempre y cuando ese resultado sea igual a cierto patrón, esto se lograría con una condición sencilla, que en español sería: si a es igual a b entonces muestralo en pantalla, en otro caso muestra un mensaje.

if then else

En tcl la condición sencilla se logra por medio de la estructura "if condicion then accion1 else accion2"; la condición deberá ser booleana, es decir, que se pueda evaluar como falsa o verdadera; accion1 es una instrucción o un conjunto de instrucciones que se ejecutarán en caso de que la condición se cumpla, de no cumplirse se ejecutarán las instrucciones incluidas en accion2.

Sintaxis:

 if {condicion} { \n
instrucciones } else { instrucciones } 
Ejemplos:
if {$valor == 5} {
  puts stdout "Valor 5, se cumplio \n
la condicion"} else {
      puts stdout $i
      }
  puts stdout "Condicion no cumplida"
}


#!/usr/local/bin/tclsh7.4
set valor [gets stdin]
if {$valor == 5} {
  puts stdout "Valor 5, se cumplio la condicion"
} else {
      puts stdout $i
      }
  puts stdout "Condicion no cumplida"
}


switch

En ocaciones es necesario realizar varias comparaciones del contenido de una variable para realizar cierta acción dependiendo de su valor específico.

Para evitar escribir una larga lista de estructuras IF THEN ELSE el tcl cuenta con la estructura switch, que compara una variable con una lista de valores, y dependiendo de cual sea este valor es la instrucción que se ejecutará.

Sitaxis:

switch -exact -- $variable {
   caso1 {accion1}
   caso2 {accion2}
   caso3 {accion3}
   default {accion4}
 }
Ejemplo:

#!/usr/local/bin/tclsh7.4
  puts stdout "Dame un numero entre 1 y 3"
  set opcion [gets stdin]
  switch -exact -- $opcion {
      1 {puts stdout "Uno"}
      2 {puts stdout "Dos"}
      3 {puts stdout "Tres"}
      default {puts stdout "Ninguna"}
   }

foreach

Esta estructura de datos toma uno por uno los valores de una lista y ejecuta para cada uno de ellos las instrucciones indicadas.

Sitaxis:

 foreach value { lista } { accion } 
Ejemplos:
set i 1
foreach value {1 2 3 4 5 6 7 8} {
  set i [expr $i*$value]
}
puts stdout $i


#!/usr/local/bin/tclsh7.4
  set i 1
  foreach value {1 2 3 4 5 6 7 8} {
    set i [expr $i*$value]
   }
  puts stdout $i
Iteraciones while
Una iteración while es un conjunto de instrucciones que se repiten mientras la condición que controla el ciclo sea verdadera. Por ejemplo, si queremos hacer que nuestro programa cuente del 1 al 10, necesitamos hacer lo siguiente:

set contador 1
while {$contador <= 10} \
  {puts stdout $contador
  incr contador }
La sentencia encerrada entre las primeras llaves es la condición que se evalua, si es verdadera se ejecuta el conjunto de instrucciones que se encuentran entre el segundo par de llaves.

while

Sintaxis

 while { ExpresionBooleana } { accion } 
Ejemplos:
set 1 0
while {$i<10} {incr i}


#!/usr/local/bin/tclsh7.4
  set contador 1
  while {$contador <= 10} \
    {puts stdout $contador
    incr contador }

for

Una instrucción for realiza un ciclo de instrucciones un n número de veces utilizando un contador que le indica la cantidad de ciclos. Dicho contador se inicializa a un cierto valor, luego se coloca la condición a evaluar y por último la forma del incremento.

Sintaxis:

 
for {inicializacion} {condicion} \n
    {incremento} {accion}
Ejemplo:
for {set i 0} {$i < 10} {incr i 3} {
   lappend aList $i
}
puts stdout aList

break

Causa la terminación inmediata de un ciclo FOR

Continue

Ocasiona la terminación del ciclo en proceso para continuar con el siguiente