Informatica Grafica
C A P I T U L O 5 Control del Flujo

if then else

Es el comando condicional básico.La estructura es "if condicion then accion1 else accion2". La condición deberá ser una expresión booleana para que pueda ser evaluada como verdadero o falso. Acción1 es una instrucción o conjunto de instrucciones que se ejecutarán si la condición es cierta; de no cumplirse esta condición, se ejecutarán las instrucciones incluidas en el else. Este else es opcional, el comando también podría escribirse así: "if condición then accion1". La palabra clave then también es opcional, con lo que el comando quedaría reducido a "if condicion accion1"

Ejemplo 5-1
if { $x == 0 } {
puts "Ha entrado en el comando if"
} else { puts "Ha entrado en el else"
}

También pueden escribirse cadenas de sentencias if-then-else, usando la palabra elseif.

Ejemplo 5-2
if { $x < 0 } {
puts "Ha entrado en el if"
} elseif { $x == 0 } {
puts "x es igual a 0"
} else {
puts "x es mayor que 0" }

También es posible acivar la condición de true o false del bucle if-then-else mediante el resultado de una operación lógica mediante los operadores && (AND) y || (OR). Un ejemplo de esto es el siguiente:


if {($x < 0 && $y > 0) || ($x > 0 && $y < 0)} {
puts "Ha entrado en el if"
}


Como se puede ver, la sintaxis es prácticamente idéntica a la de C.

switch

El comando switch es usado cuando es necesario realizar varias comparaciones que de otro modo darían lugar a una cadena enorme de sentencias if-elseif-else. El comando switch compara una variable con una lista de valores, y dependiendo de cual sea el resultado de esa comparación, será una u otro la instrucción que se ejecutará. Su sintaxis es :

switch flags valor patron1 cuerpo1 patron2 cuerpo2 ...

También pueden ser agrupados en un solo argumento de esta forma:

switch flags valor { patron1 cuerpo1 patron2 cuerpo2 ...}

Hay cuatro posibles flags para determinar como es comparado la variable con los distintos valores:

Ejemplo 5-3
switch -exact -- $opcion {
1 {puts "Uno"}
2 {puts "Dos" }
3 {puts "Tres"}
default {puts "Ninguno"}
}


for

El comando for es similar a su equivalente en C/C++. Permite la repetición de una determinada instrucción, o grupo de instrucciones, un cierto número de veces, teniendo en cuenta que debe conocerse ese número. Toma cuatro argumentos:

for {inicializacion} {test} {incremento} instruccion

El primer argumento es la inicialización del bucle, es decir, el valor que tomará, antes de iniciarse el bucle, la variable que contará el número de iteraciones. El segundo es el test, en él se comprueba si se cumple una condición. En caso de ser cierta la condición, el bucle se realiza una vez más. En caso contrario, abandona el bucle y no vuelve a entrar. El tercer argumento es el incremento. En él se incrementará o decrementará la variable la cantidad especificada. Y el último es la instruccion o grupo de instrucciones a ejecutarse.

Ejemplo 5-4
for {set i 0} {$i < 10} {incr i 3} {
set contador [expr contador+1
}

En el ejemplo anterior, el bucle se ejecutará mientras la variable i sea menor que 10, y se incrementará de 3 en 3.

Este comando puede ser útil para recorrer una lista:

Ejemplo 5-5

for {set i 0} { i < [llength $lista} {inar i 1} {
puts [lindex $lista $i] }

En este caso, el bucle se ejecutará mientras el índice sea menor que la longitud de la lista. Ya dentro del bucle, se escribirá el elemento que tenga como índice el valor de la variable i.


foreach

El comando foreach permite recorrer una lista sin necesidad de conocer el número de elementos que tiene. Su sintaxis es la siguiente:

foreach variable lista instruccion

El primer argumento es el nombre de la variable con la que se va a recorrer la lista. El segundo es el nombre de la lista a recorrer, y el tercero es la instrucción o grupo de instrucciones que deberán ejecutarse.

Ejemplo 5-6

foreach valor {1 2 4 6 8 10} {
set k [expr $valor*10]
}

Este comando resulta mucho más cómodo para recorrer una lista que el comando for, pero algunas veces es necesario conocer en el interior del bucle cuál es el índice del elemento dentro de la lista. En este caso se usará el bucle for de la forma que se explicó en el apartado anterior..



while

El bucle while permite ejecutar una instrucción o grupo de ellas mientran se cumpla una instrucción. En el momento en que la condición deje de cumplirse, el flujo del programa no volverá a entrar en este bucle. Toma dos argumentos y su sintaxis es la siguiente:

while expresion_booleana instruccion

Ejemplo 5-7
set contador 1
while { $contador <= 10 } {
incr contador
}

break

Causa la terminación inmediata de un bucle.


continue

Ocasiona la terminación de una iteración en un bucle para continuar con la siguiente.


return

El comando return es usado para regresar de un procedimiento. No es obligatorio poner return en cada procedimiento. Un procedimiento en Tcl devuelve siempre el resultado de la última operación realizada en él, a menos que se especifique lo contrario con el comando return.


Ejemplo 5-8
proc pepe { } {
return 1
}



catch

Este comando es utilizado habitualmente para capturar los errores que se produzcan durante la ejecución de un comando dado. Pero su utilización es más amplia; se utiliza para capturar el valor devuelto por un comando. Esto resultará muy útil cuando se desee leer el valor devuelto por un programa externo a la aplicación Tcl, como se verá más adelante. El hecho de capturar un error con este comando permite que el programa no "rompa" en caso de producirse dicho error; por ello, es esta su aplicación más habitual

Su sintaxis es esta:

catch instruccion resultado?

El primer argumento es la instrucción cuyo posible error ( ovalor devuelto ) se desea capturar. El segundo es el resultado de la instrucción o un mensaje de error en caso de que este se produzca. El comando catch devuelve 0 si no hubo error, y 1 si ha capturado un error.

Ejemplo 5-9
if [catch {instruccion arg1 arg2 ...]
resultado {
puts $resultado
} else { # No ha habido error . }

Este ejemplo es una utilización habitual de catch.


case

Esta dentencia es similar a switch, pero no es recomendable su utilización porque se considera obsoleta y no se asegura que se mantenga en el futuro. En su lugar debe de utilizarse switch.

Su sintaxis es:

case valor ?in? patron1 cuerpo1 patron2 cuerpo2 ...

También pueden ser agrupados en un solo argumento de esta forma:

case valor ?in? { patron1 cuerpo1 patron2 cuerpo2 ...}

Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:50:05