4.6 Bucles while



¿Qué es iteración?
la iteración es el proceso generativo de repetir un conjunto de reglas o pasos una y otra vez. Es un concepto fundamental de la programación de computadoras y que pronto descubrirás que hace la vida de los programadores bastante más agradables. Vamos a empezar.

Por el momento, vamos a ver un ejemplo:

size(500, 500);

line(50, 50, 100, 450);
line(75, 50, 125, 450);
line(100, 50, 150, 450);
line(125, 50, 175, 450);
line(150, 50, 200, 450);
line(175, 50, 225, 450);
line(200, 50, 250, 450);
line(225, 50, 275, 450);
line(250, 50, 300, 450);
line(275, 50, 325, 450);
line(300, 50, 350, 450);
line(325, 50, 375, 450);
line(350, 50, 400, 450);
line(375, 50, 425, 450);
line(400, 50, 450, 450);

En el ejemplo anterior, las líneas se han dibujado de x = 50 pixeles hasta x = 150 pixeles, con una línea cada 10 pixeles.

El código logra esto, sin embargo, aplicando las variables que ya hemos aprendido, podemos hacer algunas mejoras sustanciales y eliminar los valores codificados.

En primer lugar, hemos creado las variables para cada parámetro de nuestro sistema: x, y, spacing, len. ten en cuenta que para cada tramo dibujado, solo cambia el valor de x. Todas las demás variables permanecen igual (pero podrían cambiar si queremos).

Ejemplo 4.6-01
size(200, 200);
background(0);
stroke(255);

int y = 80;
int x = 50;
int spacing = 10;
int len = 20;

line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;
line(x, y, x, y + len);
x = x + spacing;

No está mal, supongo. Curiosamente, aunque esto es técnicamente más eficiente (que podría ajusta la variable de separación, por ejemplo, cambiando una sola línea de código). Hemos dado un paso hacia atrás, después de haber producido el doble de código. ¿Y si quisiéramos dibujar 100 líneas? Por cada línea, necesitamos dos líneas de código. En 200 líneas de código para 100 líneas. Para evitar este problema, nos gustaría ser capaces de decir:

Dibuja una línea cien veces

¡Aha! ¡Una sola línea de código!
Obviamente, no somos los primeros programadores para llegar a este dilema y que es fácil de resolver con el uso común de control de estructura de bucle. Una estructura de bucle es similar en sintaxis para un condicional. (Lo veremos en el siguiente capítulo)

Sin embargo, en vez de pedir un sí o un no para determinar si un bloque de código debe ser ejecutado una vez, nuestro código le pedirá un sí o un no para determinar cuántas veces se debe repetir el bloque de código, esto se conoce como iteración.

BUCLE WHILE 
Existen tres tipos de bucles:

while
do-while
for

Al igual que con las estructuras condicionales (if/else), un bucle while emplea una condición de prueba boleada. Si la prueba da como resultado true (verdadero), las instrucciones que se incluyen entre las llaves se ejecuta; si es falsa, seguimos a la siguiente línea de código.

La diferencia aquí es que las instrucciones dentro del bloque while seguirán siendo ejecutadas una y otra vez hasta que la condición de prueba se convierte en falsa.

while (BOOLEAN TEST)

A. DO THIS
B. DO THIS

REPEAT


size(200, 200);
int x = 50;
int y = 80;
int spacing = 10;
int len = 20;
int endLegs = 150;

stroke(0);
while(x <= endLegs){
line(x, y, x, y + len);
x = x + spacing;
}

En lugar de escribir “line(x, y, x, y + len);” tantas veces como lo hicimos al principio, ahora lo escribimos solo una vez dentro del bucle while, diciendo “siempre que x es menos que 150, dibuja una línea en x, a la vez aumenta el valor de x. De esta manera 21 líneas de código se reducen a 4”. Además podemos cambiar la variable de espaciado para generar más líneas.

int spacing = 4;
while(x <= endLegs){
line(x, y, x, y + len);
x = x + spacing;
}

Veamos un ejemplo más utilizando rectángulos en lugar de líneas. Hay que hacer tres preguntas claves.

1. ¿Cuál es la condición inicial para el bucle? Aquí, desde el primer rectángulo es en “y localización 10, queremos comenzar con nuestro bucle con y = 10.

int y = 10;

2. ¿Cuándo debe parar tu bucle? Dado que queremos visualizar rectángulos hasta la parte inferior de la ventana, el bucle debe parar cuando y es mayor que height. En otras palabras, queremos que el bucle se mantenga el mayor tiempo posible, siempre que y sea menor que la altura.

while(y < 200){
//loop!
}

3. ¿Cuál es su funcionamiento de bucle? En este caso, cada paso por el bucle, queremos dibujar un rectángulo nuevo debajo de la anterior. Podemos lograr esto llamando a la función rect() es incrementando en un 20px.

rect(100, y, 100, 10);
y = y + 20;

Poniendo todo junto:

int y = 10;
while(y < height){
rect(100, y, 100, 10);
y = y + 20;

EXIT Conditions
Hay que tener cuidado con los bucles infinitos.

WHILE (ALWAYS TRUE)

DO THIS FOREVER AND EVER…

Si examinamos el ejemplo 6-3 podemos ver que tan pronto como x es mayor que 150, el bucle se detiene. Y esto es debido a los incrementos de x por spacing, que siempre es un número positivo. No es un accidente, cada vez que nos embarcamos en la programación con una estructura de bucle, hay que asegurarse de que el tiempo se cumple la condición de salida de bucle!.


Processing no señalará un error, repetirá el bucle de manera infinita.

No hay comentarios:

Publicar un comentario

¿Te ha servido de ayuda? Recibe las clases en tu mail