En el pasado número de PC World se incluía una introducción a la programación de páginas activas. Este mes nos centraremos en cómo controlar el flujo del programa analizando las estructuras de control existentes.

Cualquier tipo de lenguaje (Visual Basic, Visual C, C++, Pascal, etc..) requiere de una metodología de programación. Es decir, de una serie de normas y requisitos que hay que llevar a buen fin con el objetivo de lograr que el programa en su conjunto funcione y sea fácil de comprender por el programador u otra persona que tuviera que hacer algún tipo de modificación. Programar en ASP requiere tener conocimiento de cómo funcionan una serie de instrucciones de flujo de control

Al igual que en la mayoría de lenguajes de programación, existen instrucciones muy parecidas entre ellos, y que cumplen la misma función, en las que tan sólo cambia la forma de reflejarlas a lo largo del código del programa.

Controlar la ejecución del programa

Siempre que se programa es interesante controlar la ejecución del código, más que nada porque en caso contrario tendríamos un pleno descontrol sobre lo que estamos haciendo. Las sentencias de control de flujo permiten establecer un criterio y sus posibles consecuencias en función de mismo. La instrucción más utilizada en este caso es IF…THEN…ELSE…END IF, y su forma de representación es:

IF Condición THEN

Instrucción_1

Instrucción_2

…..

Instrucción_n

END IF

Un ejemplo, del uso de esta instrucción sería:

<%

IF edad <= 25 THEN

Response.Write(“Eres Joven”)

Response.Write(“Pásalo bien”)

END IF

%>

En este ejemplo se puede observar claramente que la condición es edad<=25, en caso de ser cierta se ejecutarán las dos siguientes instrucciones. Pero también puede darse el caso que no se cumpla la condición, con lo cual en el ejemplo anterior no ocurriría nada. Para esta circunstancia, se puede utilizar la opción ELSE, como se ve en el siguiente ejemplo:

<%

IF edad <= 25 THEN

Response.Write(“Eres Joven”)

Response.Write(“Pásalo bien”)

ELSE

Response.Write(“Eres un poco mayor”)

END IF

%>

La condición es la misma que antes, pero en caso de no cumplirse se ejecutará la instrucción que sigue a ELSE, por lo que este ejemplo, en un caso o en otro, siempre habrá un resultado final. Utilizando varias veces esta estructura se pueden crear IF anidados, es decir una condición dentro de otra.

<%

IF day(date())=14 AND month(date())=10 THEN

Response.Write(“Es tu cumpleaños”)

IF year(fecha())-“1978”=18 THEN

Response.Write(“… y ya eres mayor de edad”)

ELSE

Response.Write(“Ya llegará tu cumpleaños”)

END IF

%>

Comprobamos que el día coincide con una fecha en concreto, en este caso hemos utilizado uno de los tres operadores booleanos (AND –y–, OR –o- y NOT –no–) para obligar a que se cumplan las dos condiciones. Si se cumplen, se vuelve a hacer otra comprobación utilizando el año de nacimiento, si la diferencia es 18, ejecuta la siguiente instrucción. En cualquier caso si no se cumple la primera condición, se ejecuta la siguiente instrucción a ELSE, que da como resultado ya llegará tu cumpleaños. Hemos condicionado el mensaje ...y ya eres mayor de edad a que el día y mes coincidan con los valores, de tal forma que si no hay cumpleaños no hay comprobación de la edad.

Si sólo es necesario utilizar una instrucción en cada caso, la expresión IF…THEN…ELSE…END IF, se puede utilizar en una sola línea.

<%

IF edad <= 25 THEN Response.Write(“Eres Joven”) ELSE Response.Write(“Eres un poco mayor”) END IF

%>

Otra instrucción muy útil cuando el número de decisiones a tomar es mayor es SELECT…CASE…END SELECT. Esta instrucción permite elegir un número determinado de opciones a realizar y su forma de uso es:

SELECT CASE expresión

CASE valor_1 instrucción_1

CASE valor_2 instrucción_2

CASE valor_n instrucción_n

END SELECT

Si la expresión que se comprueba coincide con alguno de los valores, entonces se ejecuta la instrucción (o conjunto de instrucciones) correspondientes. Veamos un ejemplo:

<%

SELECT CASE edad

CASE 18 Response.Write(“Ya eres mayor de edad”)

CASE 45 Response.Write(“Ya eres un poco mayor”)

CASE 25 Response.Write(“Aún eres joven”)

CASE ELSE Response.Write(“Tienes buena edad”)

END SELECT

%>

En este caso existen tres posibilidades en función de la variable edad, en cualquier caso si ninguna de ellas fuera cierta, se ejecutaría la instrucción que sigue a CASE ELSE.

Las instrucciones conocidas como bucles permiten ejecutar, un número determinado de veces, un conjunto de instrucciones, además, en algunos casos la continuación o interrupción del bucle es posible finalizarla en si se cumpliera una condición establecida.

La instrucción para realizar un número de bucles determinado es FOR…TO…STEP… NEXT. Su forma de uso es:

FOR variable = valor_incial TO valor_final STEP intervalo

Instrucción_1

Instrucción_2

Instrucción_n

NEXT

Esta instrucción necesita definir una variable que será el valor en el que se almacene el número de repeticiones realizadas hasta ese momento. Además de ser necesario establecer un valor inicial y otro final, la opción STEP permite establecer un intervalo de forma que si éste es negativo, la cuenta será descendente (-2 contaría de dos en dos de forma descendente) y si es positivo será ascendente (+3 contaría de tres en tres de forma ascendente). Si no se especifica el valor de STEP se toma el valor +1 . Veamos un ejemplo de esta instrucción.

En la primera línea de la página escribimos la instrucción que obliga a declarar todas las variables con el fin de no cometer ningún error.

<% Option Explicit %>

Y el código que utiliza la instrucción FOR sería:

<%

Dim factorial, numFactorial, i, j

factorial = 1

numFactorial = 7

FOR i = 1 to numFactorial

factorial = factorial * i

NEXT

Response.Write(“El factorial de “ & numFactorial & “ es... “ & factorial)

Response.Write(“<br>” & “Que es lo mismo que multiplicar los números... “)

FOR j = numFactorial to 1 STEP -1

Response.Write( j & “ “)

NEXT

%>

En este ejemplo se pueden observar los dos casos, la cuenta ascendente y la descendente. Lo primero ha sido declarar e inicializar las variables que se van a utilizar. El primer bucle, realiza una cuenta ascendente con el fin de ir guardando en la variable factorial el resultado del producto del contador x en ese momento y el valor anterior de factorial. El resultado final será el producto de todos los valores que toma x, es decir el factorial. Obsérvese que el valor final del primer bucle es el valor de numFactorial. Una vez finalizado el bucle tan sólo queda imprimirlo por pantalla.

El segundo bucle realiza una cuenta descendente con el fin de mostrar como se realiza el cálculo del factorial. Para ello se utiliza la opción STEP –1.

Si en algún mom