viernes, 19 de marzo de 2010

ESTRUCTURAS DE CONTROL

El desarrollo de un programa viene determinado por el orden en que aparecen las instrucciones. El lenguaje Perl posee controlar un conjunto de instrucciones que permiten controlar el desarrollo de un programa. Estas instrucciones se denominan estructuras de control porque permiten ejecutar un conjunto de instrucciones cuando se verifica una condición o ejecutar iterativamente un bloque de instrucciones mientras una expresión sea válida.

1. La instrucción if.

Es muy parecida a la utilizada en C. La sintaxis de la instrucción if es la siguiente:

if (expresión) {
instrucción o bloque de intrucciones 1;
}
[else {
instrucción o bloque de intrucciones 2;
} ]
El programa evalúa la expresión. Cuando esta expresión resulta verdadera, se ejecuta la instrucción o el bloque de instrucciones 1. Por contra, cuando es falsa de ejecuta la instrucción o bloque de instrucciones 2. Esta última parte es opcional. Para representar una estructura de varios casos se utilizará la sintaxis siguiente:

if (expresión 1) {
instrucción o bloque de instrucciones 1;
}
elsif (expresión 2) {
instrucción o bloque de instrucciones 2;
}
elsif (expresión 3) {
instrucción o bloque de instrucciones 3;
}
else {
intrucción o bloque de instrucciones 4;
}
A continuación veremos un ejemplo sencillo del uso de esta estructura para comprender mejor su funcionamiento:

print "Introduzca un número del cero al dos y pulse Enter:\n";
$var = ;
if ($var == 0) {
print "Esta es la opción 0\n";
}
elsif ($var == 1) {
print "Esta es la opción 1\n";
}
elsif ($var == 2) {
print "Esta es la opción 2\n";
}
else {
print "No existe al opción tecleada\n";
}
2. La instrucción while.

La instrucción while ejecuta iterativamente un bloque de instrucciones mientras una expresión sea válida, evaluando la comprobación en cada iteración. Cuando la prueba es válida, se ejecuta la instrucción o el bloque de instrucciones delimitado por las llaves. La sintaxis de esta instrucción es:

while (expresión) {
instrucción o bloque de instrucciones;
}
He aquí un sencillo ejemplo de manejo de esta estructura:

print "Teclea \"x\" para salir:\n";
$ristra = "";
while ($ristra ne "x") {
$ristra = ;
chop($ristra);
print "Has escrito $ristra\n";
}
print "Salida.\n"
3. La instrucción for.

La instrucción for permite ejecutar iterativamente un conjunto de instrucciones. La sintaxis de la instrucción for es:

for (inicial_exp; test_exp; incremento_exp) {
instrucción o bloque de intrucciones;
}
donde:

inicial_exp es la instrucción que inicializa el bucle. Consiste generalmente en la asignación de un valor a una variable que permite controlar el número de iteraciones.
test_exp es la expresión evaluada en cada iteración. Cuando esta expresión es verdadera, el bloque de instrucciones se ejecuta.
incremento_exp es la expresión que permite la actualización de la variable que controla el número de iteraciones.
A continuación veremos un ejemplo de esta estructura para iniciarnos en su manejo:

print "10 Iteraciones\n";
for ($i=0; $i<10; $i++) {
print "Interación número $i\n";
}
4. La instrucción foreach.

La instrucción foreach es similar a la función del mismo nombre de los Shells de Unix. Asocia iterativamente a una variable cada elemento de la lista. Esta sucesión de valores sirve para parametrizar la ejecución del bloque de instrucción. La sintaxis de la instrucción foreach es:

foreach $variable (@lista) {
instrucción o bloque de instrucciones;
}
Las intrucciones for y foreach son equivalentes. Sin embargo, la utilización de una de estas instrucciones se justifica generalmente por el contexto. El ejemplo siguiente lo ilustra:

@lista = ("elem1", "elem2", "elem3", "elem4");
for ($i = 0; $i<= $#lista; $i++) {
print $lista[$i], "\n";
}
Este ejemplo no utiliza las características de los arrays en Perl. La utilización de la instrucción foreach permitirá recorrer la lista de forma más elegante. El ejemplo siguiente lo ilustra:

@lista = ("elem1", "elem2", "elem3", "elem4");
foreach $elem_actual (@lista) {
print $elem_actual, "\n";
}
5. La instrucción goto.

La instrucción goto label permite cambiar el recorrido lineal de las líneas de código prosiguiendo la ejecución del programa en la línea de etiqueta label. La etiqueta se define colocando al final del identificador dos puntos (:). En el siguiente ejemplo se podrá ver mejor la contrucción del goto.

if ($expr ne $expr_correcta) {
goto error;
}
...
error: print "expresión incorrecta";
La utilización del goto en Perl no es recomendable. Por que le quita al código legibilidad y aumenta la posibilidad de errores.

6. La instrucción last.

La instrucción last interrumpe la ejecución del bucle actual y se ejecuta la instrucción que sigue al bloque. El ejemplo siguiente permite interrumpir el bucle while cuando la variable i toma el valor 3.

$i = 0;
while($i < 6) {
if($i == 3) {
last;
}
$i++;
}
print "el valor de \$i es $i";
Cuando la instrucción tiene como argumento una etiqueta, la ejecución prosigue en la línea indicada por la etiqueta.

7. La instrucción next.

La instrucción next es idéntica a la instrucción continue en C. Interrumpe la ejecución del bloque de instrucción actual y prosigue la ejecución en la iteración siguente. Esta instrucción no interrumpe completamente la ejecución del bucle; la expresión que controla el bucle se evalúa. Si el resultado de la expresión es válido, el bucle se ejecuta de nuevo.

Cuando una instrucción tiene como argumento una etiqueta, la instrucción prosigue en la línea identificada por la etiqueta y no al principio del bloque.

Seguidamente veremos un ejemplo de dicha instrucción:

print "Teclea \"x\" para salir:\n";
print "Si se pulsa la tecla \"s\" no se imprime:\n";
$ristra = "";
while ($ristra ne "x") {
$ristra = ; chop($ristra);
if ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";
}
print "Salida.\n"
8. La instrucción until.

La instrucción until al igual que la instrucción while permite ejecutar un conjunto de instrucciones un número repetido de veces. Pero al contrario que la la instrucción while, la intrucción until ejecuta dicho bloque de instrucciones mientras no se verifique la comprobación. La sintaxis es:

until (expresión) {
instrucción o bloque de instrucciones;
}
He aquí el ejemplo anterior pero utilizando la instrucción until.

print "Teclea \"x\" para salir:\n";
print "Si se pulsa la tecla \"s\" no se imprime:\n";
$ristra = "";
until ($ristra eq "x") {
$ristra = ; chop($ristra);
if ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";
}
print "Salida.\n"
9. La instrucción unless.

Esta instrucción es análoga al if, salvo que permite considerar la no verificación de la prueba. Su sintaxis es la siguiente:

unless (expresión) {
instrucción o bloque de intrucciones 1;
}

Para ver mejor el funcionamiento del unless, modificaremos el ejemplo anterior para adaptarlo a dicha instrucción.

print "Teclea \"x\" para salir:\n";
print "Si se pulsa la tecla \"s\" no se imprime:\n";
$ristra = "";
until ($ristra eq "x") {
$ristra = ; chop($ristra);
unless ($ristra eq "s") {
next;
}
print "Has escrito $ristra\n";
}
print "Salida.\n"

No hay comentarios:

Publicar un comentario