AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

¡Nueva funcionalidad de WINDEV 2024!
Ayuda / Tutorial WINDEV / Tutorial - Fundamentos de WLanguage
  • Lección 5 - Bucles
  • Presentación
  • Ejemplo práctico
  • Instrucción FOR
  • Instrucción LOOP
  • Instrucción WHILE
  • En resumen

Tutorial - Fundamentos de WLanguage

Lección 5 - Bucles
Abordaremos los siguientes temas:
  • La instrucción FOR.
  • La instrucción LOOP.
  • La instrucción WHILE.
Durée de la leçon 15 min
Presentación
Las instrucciones de bucle permiten ejecutar un proceso varias veces. Según el número de iteraciones se utiliza una instrucción de bucle específica . Se pueden utilizar varias instrucciones para los bucles:
  • FOR...
  • LOOP...
  • WHILE...

Ejemplo práctico

Para completar los ejercicios de esta lección, trabajaremos con el proyecto "WLanguage" que utilizamos en la lección anterior. El principio sigue siendo el mismo: el código de ejemplo se introducirá directamente en el evento "Inicialización" del proyecto.

Si es necesario, abra el proyecto "WLanguage" que creó en la primera lección de este tutorial (consulte el párrafo Un proyecto para descubrir WLanguage de la lección 1).
Para ver los eventos WLanguage del proyecto:
  1. Haga clic derecho en la "P" que se encuentra junto a las pestañas de elementos abiertos. El menú contextual se abre.
  2. Seleccione "Código del elemento".
  3. El editor de código muestra los diferentes eventos asociados al proyecto.
Instrucción FOR
La instrucción FOR se utiliza cuando se conoce el número de iteraciones. Esta instrucción permite controlar las iteraciones de un bucle mediante una variable.
La sintaxis de la instrucción FOR es la siguiente:
FOR Index = Start value TO End value
Process to run
END

Para probar esta instrucción, introduciremos un código WLanguage para rellenar un array de números enteros con números pares entre 1 y 10. A continuación, se hará una lista con el contenido del array. Escribiremos este código en varias etapas.
  1. Si es necesario, elimine el código WLanguage del evento "Inicialización" del proyecto.
  2. Primero, vamos a rellenar un array de números enteros con valores de 1 a 10. Copie el siguiente código:
    ArrayOfNumbers is array of int

    FOR Index = 1 TO 10
    // Display the index
    Trace("Loop | Index value: [%Index%]")
    ArrayOfNumbers.Add(Index)
    Trace("[%Index%] was added to the array")
    END
    Este código ejecuta el proceso 10 veces y en cada paso por el bucle, el valor del índice se almacena en un array a través de la función <Array>.Add.
  3. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  4. Si es necesario, abra el panel "Traza del depurador" para ver el resultado: en la pestaña "Inicio", en el grupo "Entorno", despliegue "Paneles", seleccione "Paneles" y, a continuación, haga clic en "Traza del depurador".
  5. El panel "Traza del depurador" contendrá los mensajes de la ejecución del bucle y de los números agregados al array para los 10 índices.
    Loop | Index value: 1
    1 was added to the array
    Loop | Index value: 2
    2 was added to the array
    Loop | Index value: 3
    3 was added to the array
    Loop | Index value: 4
    4 was added to the array
    Loop | Index value: 5
    5 was added to the array
    Loop | Index value: 6
    6 was added to the array
    Loop | Index value: 7
    7 was added to the array
    Loop | Index value: 8
    8 was added to the array
    Loop | Index value: 9
    9 was added to the array
    Loop | Index value: 10
    10 was added to the array
Vamos a modificar el código para salir del bucle si el índice es 5. En este caso, comprobaremos el valor del índice y si es 5, podemos usar la palabra clave BREAK para finalizar el bucle.
  1. El código ahora es el siguiente:
    ArrayOfNumbers is array of int

    FOR Index = 1 TO 10
    // Display the index
    Trace("Loop | Index value: [%Index%]")

    IF Index = 5 THEN
    Trace("Break condition")
    BREAK
    END
    ArrayOfNumbers.Add(Index)
    Trace("[%Index%] was added to the array")
    END
  2. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  3. El panel "Traza del depurador" contendrá los mensajes de la ejecución del bucle y de los números agregados al array para los primeros 5 índices.
    Loop | Index value: 1
    1 was added to the array
    Loop | Index value: 2
    2 was added to the array
    Loop | Index value: 3
    3 was added to the array
    Loop | Index value: 4
    4 was added to the array
    Loop | Index value: 5
    Break condition
Ahora, vamos a modificar el código para agregar solo los índices pares al array. Si el índice es impar, el bucle debe pasar a la siguiente iteración sin agregar un valor al array. Usaremos la palabra clave CONTINUE.
  1. El código ahora es el siguiente:
    ArrayOfNumbers is array of int

    FOR Index = 1 TO 10

    Trace("Loop | Index value: [%Index%]")

    IF Index = 5 THEN
    Trace("Break condition")
    BREAK
    END

    IF IsOdd(Index) = True THEN
    Trace("Odd index: go to next iteration")
    CONTINUE
    END
    ArrayOfNumbers.Add(Index)
    Trace("[%Index%] was added to the array")
    END
  2. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  3. El panel "Traza del depurador" contendrá los mensajes de la ejecución del bucle para los primeros 5 índices. Para los números impares, un mensaje indica que el código no se ejecuta. El mensaje que indica que se agregaron los números solo se mostrará para los números pares.
    Loop | Index value: 1
    Odd index: go to next iteration
    Loop | Index value: 2
    2 was added to the array
    Loop | Index value: 3
    Odd index: go to next iteration
    Loop | Index value: 4
    4 was added to the array
    Loop | Index value: 5
    Break condition
Ahora, vamos a agregar el código que nos permitirá recorrer el array y hacer una lista de los índices que se agregaron. Vamos a utilizar un bucle FOR. El inicio y final del bucle serán:
  • el primer elemento del array. Este elemento corresponde a 1 (como lo vimos en la lección 3),
  • el último elemento del array. Como no sabemos cuál es, utilizaremos la propiedad Count. Esta propiedad devuelve el número de elementos del array (y por tanto, el índice del último elemento).
Para recorrer el array:
  1. Agregue el siguiente código:
    FOR Index = 1 TO ArrayOfNumbers.Count
    // Display the index and the corresponding value in the array
    Trace("Index: [%Index%] | Value: " + ArrayOfNumbers[Index])
    END
  2. Este código se puede optimizar. Con esta sintaxis, el número de elementos en el array se reevalúa cada vez que se ejecuta el bucle. Si el número de elementos del array cambia (por ejemplo, si se eliminan elementos), el valor final de la variable de control se ajustará. En nuestro ejemplo, el array no se modifica durante el bucle: se puede utilizar la palabra clave _TO_ para no recalcular el número de iteraciones en cada bucle. El código ahora es el siguiente:
    FOR Index = 1 _TO_ ArrayOfNumbers.Count
    // Display the index and the corresponding value in the array
    Trace("Index: [%Index%] | Value: " + ArrayOfNumbers[Index])
    END
  3. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  4. El panel "Traza del depurador" contendrá los mensajes mostrados para los primeros 5 índices. Para los números impares, un mensaje indica que el código no se ejecuta. Luego, se muestra el contenido del array.
    Loop | Index value: 1
    Odd index: go to next iteration
    Loop | Index value: 2
    2 was added to the array
    Loop | Index value: 3
    Odd index: go to next iteration
    Loop | Index value: 4
    4 was added to the array
    Loop | Index value: 5
    Break condition
    Index: 1 | Value: 2
    Index: 2 | Value: 4
Observación: Puede definir el valor de incremento del índice utilizando la palabra clave STEP. Por ejemplo, el siguiente código ejecuta el proceso 2000 veces y la variable Index disminuye de 10 en 10:
// FOR loop from 2000 to 1, in steps of 10
FOR Index = 2000 TO 1 STEP -10
// Display the index
Trace(Index)
END
Para obtener más información, consulte Instrucción FOR.
Instrucción LOOP
La sentencia LOOP se utiliza cuando no se conoce el número de iteraciones. En este caso, se debe evaluar una condición para salir del bucle.
La sintaxis de la instrucción LOOP es la siguiente:
LOOP
Process to run
IF <Condition to evaluate> THEN BREAK
END


Vamos a escribir un fragmento de código WLanguage para probar esta instrucción:
  1. Si es necesario, elimine el código WLanguage del evento "Inicialización" del proyecto y copie el siguiente código.
    Este código le resta 1 a un entero hasta que el valor sea cero:
    Counter is int
    Counter = 10
    LOOP
    Trace("Loop | Value: [%Counter%]")
    Counter--
    IF Counter = 0 THEN BREAK
    END
    Trace("End of loop")
  2. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  3. El panel "Traza del depurador" muestra el mensaje de las 10 ejecuciones del bucle.
    Loop | Value: 10
    Loop | Value: 9
    Loop | Value: 8
    Loop | Value: 7
    Loop | Value: 6
    Loop | Value: 5
    Loop | Value: 4
    Loop | Value: 3
    Loop | Value: 2
    Loop | Value: 1
    End of loop
La palabra clave WHILE también puede utilizarse en los bucles. En este caso, la sintaxis de la instrucción LOOP es la siguiente:
Counter is int
Counter = 10
LOOP
Trace("Loop | Value: [%Counter%]")
Counter = Counter - 1
DO WHILE Counter > 0
Trace("End of loop")
La instrucción LOOP puede tener el mismo comportamiento que FOR: para ello, se debe usar una sintaxis con salida según el número de iteraciones:
LOOP (<Number of iterations>)
...
END
En nuestro ejemplo, el código sería el siguiente:
Counter is int
Counter = 10
LOOP(10)
Trace("Loop | Value: [%Counter%]")
Counter --
END
Trace("End of loop")
Para obtener más información, consulte Instrucción LOOP.
Instrucción WHILE
Las instrucciones WHILE y LOOP funcionan según el mismo principio. La diferencia es que la condición de salida se evalúa ANTES de que se ejecute el código del bucle. Esta evaluación compara una variable con un valor determinado. Esta variable parte de un valor inicial y se modifica en el bucle hasta llegar a la condición de salida.
La sintaxis de la instrucción WHILE es la siguiente:
<Initialize the variable to its start value>
WHILE <Compare the variable to its end value>
Process to run
<Modify the variable>
END

Vamos a escribir un fragmento de código WLanguage para probar esta instrucción:
  1. Si es necesario, elimine el código WLanguage del evento "Inicialización" del proyecto y copie el siguiente código.
    Este código agrega 1 a un número entero siempre y cuando sea menor que 10.
    Counter is int = 1
    WHILE Counter <= 10
    Trace("Loop | Value: [%Counter%]")
    // Process to run
    Counter ++
    END
    Trace("End of loop")
  2. Probemos este código: haga clic en Probar proyecto en los botones de acceso rápido.
  3. El panel "Traza del depurador" muestra el mensaje de las 10 ejecuciones del bucle.
    Loop | Value: 1
    Loop | Value: 2
    Loop | Value: 3
    Loop | Value: 4
    Loop | Value: 5
    Loop | Value: 6
    Loop | Value: 7
    Loop | Value: 8
    Loop | Value: 9
    Loop | Value: 10
    End of loop
Para obtener más información, consulte Instrucción WHILE.
En resumen
En esta lección, vimos algunas de las instrucciones condicionales disponibles en WLanguage:
  • La instrucción FOR.
  • La instrucción LOOP.
  • La instrucción WHILE.
En la próxima lección, veremos cómo crear y usar procedimientos WLanguage.
Lección anteriorTabla de contenidoSiguiente lección
Versión mínima requerida
  • Versión 2024
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 07/12/2023

Señalar un error o enviar una sugerencia | Ayuda local