[AUDIO EN BLANCO] Hola. Seguimos con la ultima clase de esta lección donde vamos a ver diferentes tipos de loops. Efectivamente los loops for y los loops while. Bueno ¿qué es un loop? Ya tenemos alguna noción de que es un loop. Hemos usado el, el, la función loop de arduino todo el tiempo y ¿que hace básicamente? Yo entro al loop, ejecuto el código dentro de los corchetes, termino el corchete y vuelvo a empezar todo desde un principio. Voy a hacerles un loop. Cada uno de estas vueltas, lo denominamos uno de los ciclos Pero el loop no es tal. Como se ejecuta indefinidamente yo no puedo controlar cuántas veces se ejecuta, lo puedo controlar cuando termine. O sea, lo que vamos a aprender ahora es, vamos a hacer loops que podamos controlar. Lo podemos ejecutar un número definido de veces, por ejemplo, yo digo "haz ésto 10 veces". O lo puedo ejecutar según una condición, cuando algo cambia. Cuando alguna condición que puede ser bastante arbitraria pasa a ser falsa, yo dejo de ejecutar un ciclo, por ejemplo. Entonces, vamos a partir con el loop while, que es segundo, que es un poco más sencillo. Como funciona el loop while. Este loop se va a repetir indefinidamente mientras la condición impuesta sea cierta. Entonces es algo parecido al if Solo que cuando termina, vuelve a empezar. ¿Cómo es ésto? Esta es la sintaxis while y entre paréntesis, una condición. Entonces yo estoy ejecutando mi código, llego a este comando while; si esta condición es cierta ejecuto el código entre los corchetes y después, a diferencia del if, en vez de seguir vuelvo a validar la condición. Si la condición todavía es cierta, lo vuelvo a ejecutar. Y así indefinidamente, la condición sigue siendo cierta, lo vuelvo a ejecutar y mientras la condición no cambie, ésto se va a ejecutar infinitamente. Un poco como pasa con el loop. Pero si la condición pasa a ser falsa, yo vuelvo para acá, ahora la condición es falsa, entonces salgo del loop. Y así es como funciona. Es muy parecido a un if, solo que se repite. Y de la misma forma que hicimos los ejemplos anteriores, podemos hacer un ejemplo de contador que es muy similar. Entonces, vamos viendo cómo funciona. Tengo una variable entera que se llama mi número que parte con un valor 0. Como siempre, inicializo la comunicación serial y escribo estas dos frases. Entonces, lo primero que voy a ver yo a la salida del terminal va a ser ejemplo while una linea en blanco y empezamos. ¿Que pasa después? Yo entro al while loop inmediatamente me encuentro con el while. Entonces ¿que pasa en el while? digo¿ mi número más más es menor que 10? a ver, mi número es 0, ¿Es menor que 10? Si. Aumenten 1. Ahora mi número es 1 y yo entré a la condición. Imprimo mi número. O sea imprimo 1, y espero un segundo. Salgo del loop while. Vuelvo a verificar la condición. ¿Cuánto vale mi número? 1. ¿Es menor que 10? Si. Perfecto. Entro al while. Mi número aumenta en 1 por el operador más más, no nos olvidemos. Entonces mi número ahora vale 2. Imprimo mi número. 2. Espero. Así, sucesivamente hasta que llegue a 9. Veamos qué pasa en 9. Mi número más más, ¿es menor que 10? Si, mi número es 9. Entonces entro al while, mi número pasa a ser 10. Imprimo mi número. 10. Tengo un delay, y salgo. Ahora, vuelvo al while Mi número es 10. ¿Es menor que 10? No. Por tanto no entro al while. Mi número aumenta en 1. Me salto éste código y ejecuto la siguiente instrucción. Imprimo. Volvemos a empezar. Espero un segundo. Y empieza todo de nuevo. 1, 2, etcétera Es bastante parecido a los ejemplos anteriores, esa es la idea para que ustedes puedan ir viendo las pequeñas diferencias. Por ejemplo que acá no escribe 'iii'. ¿Que pasaría si por ejemplo cambiamos este para arriba? Tendríamos otro resultado. Y, y así podemos cambiar estas condiciones. Pueden ustedes en su caso, cambiar este más más, moverlo hacia acá, poner más, más mi número, etcétera. Jueguen con ésto, insisto que es la única forma de entenderlo. Acá vemos que el resultado era el que habíamos predicho. Ahora vamos a ver el loop For. El loop for es practicamente útil porque permite ejecutar una sección de código un número definido de veces. Yo puedo previamente definir cuántas veces voy a ejecutar un cierto código, esa es la ventaja de éste loop en particular. Se pueden hacer otras cosas también. ¿Cómo funciona ésto? Esto se ejecuta según una regla establecida al principio. A ver, ésta es la sintaxis: Yo escribo for y entre paréntesis tengo tres argumentos: El primero es una inicialización. El segundo es una condición booleana y el tercero es una regla de incremento. Vamos viendo uno por uno. Entonces. Partamos por la inicialización. El loop for usa una variable y esta variable se define o inicializa al iniciar el primer ciclo. O sea, yo estoy ejecutando mi programa, llego a esa instrucción y lo primero que hago es int k =0, inicializo mi variable k con valor 0 y después, yo voy a mi condición; y en base a esa condición yo puedo entrar o puedo no entrar a los corchetes. Veamos cómo es esto Entonces, yo inicializo mi variable. Si mi condición es cierta, entro al 'iii', a los corchetes, ejecuto el código, termino, y después lo primero que hago es el incremento. Con el incremento esta base de incremento aumenta cada en 1 y después de realizar el incremento vuelvo a regresar a la condición. Si la condición es cierta, revierto todo este procedimiento de nuevo. Entonces, a ver. Veámoslo de nuevo. Yo estoy ejecutando mi programa, llego a la línea del código que corresponde al for. Lo primero que hago: Inicializar ese int se inicializa y despues nunca más vuelvo a entrar acá. ¿Por que? Porque inicializo, voy a mi condición, si es cierta ejecuto el código. Termino el código. Hago el incremento. Vuelvo a mi condición, ejecuto el código, etcétera. Nunca más voy a la inicialización, porque si volviera a ir a la inicialización regresaría a mi variable y básicamente mi incremento no serviría de nada porque volvería siempre al punto de partida. Entonces, ese, ese es el orden. Inicializo, reviso la condición, ejecuto, incremento, vuelvo a regresar a la condición. Es un poco confuso, aqui se ve bien raro últimamente por el orden en el que están los argumentos, pero jugando un poco con esta función lo van a ir entendiendo. Entonces, volvamos al ejemplo que es bastante similar a los anteriores. Yo tengo una variable entero llamada mi numero que tiene valor 0. Inicializo la comunicación serial. Imprimo, como siempre, y daría ejemplo for y empezamos. Y luego pasamos al loop. Entonces, lo primero que yo encuentro es el comando for donde se inicializa mi número =0. La condición para entrar es que mi número sea menor que 10 y el incremento es, aumentar mi número en 1. Entonces vamos pasando paso por paso. Mi número =0, entonces partimos por aquí. Mi número vale 0. ¿Es mi número menor que 10? Si. Entro. Imprimo mi número 0, espero un segundo. Salgo. Aumento en 1. Primero aumento 1. ¿Es mi número menor que 10? Si. Imprimo el 1. Espero un segundo. Salgo. Aumento en 1. Mi número vale 2. ¿Es mi número menor que 10? Si. Entro. Imprimo, espero un segundo, aumento en uno. Y así seguimos hasta que, supongamos, mi número vale ocho. ¿Es mi número menor que 10? Sí. Imprimo número ocho espero un segundo, salgo, aumento mi número a nueve. ¿Es nueve menor que 10? Sí. Imprimo nueve, espero un segundo salgo. Primero aumento, eso es lo importante. Ahora mi número vale 10. ¿Es mi número menor que 10? No. No entro al código, me paso para acá y se imprime volvemos a empezar. Al igual que antes este código es super parecido a los anteriores con pequeñas diferencias. Por ejemplo, acá no llegamos a imprimir el valor 10. ¿Por qué pasa eso? Por la forma en que está estructurado el código. Si, por ejemplo, esto fuera un menor o igual sí alcanzaríamos a escribir el 10. Entonces, hay muchas formas diferentes de combinar esto y uno siempre tiene que tenerlo bien claro. Porque si es que yo quiero, por ejemplo, recorrer un arreglo desde cero hasta 10 tengo que tener en cuenta, y saber con certeza, si es que el loop que estoy haciendo, efectivamente va a recorrer todos los valores que yo quiero o si va a empezar de uno, o si va a terminar en nueve. Entonces, la única forma de tener claridad al respecto es jugar con esto. Jugar por mucho rato. Nuevamente, tratar de predecir los resultados. Y ver si, efectivamente el resultado es el que nosotros esperábamos. Y si bien el loop FOR en general se usa para ir aumentando de uno en uno y recorrer arreglos, o hacer cualquier iteración de ese tipo, en realidad es mucho más versátil que eso. Y ustedes podrían encontrarse con algo de este estilo, que en realidad es completamente distinto a lo que vimos en cierta forma porque yo inicializo un número cualquiera que no es cero mi condición es otra, y en vez de aumentar, resto. Y no resto uno sino que resto cuatro. También es válido. Yo puedo aplicar cualquier condición aquí cualquier valor inicial, y cualquier tipo de incremento. De hecho, puedo hacerlo paramétrico y empezar en algún K inicial definido antes del código. Comparar con algún K final, también definido antes del código. Y hacer un incremento, que también está definido antes del código. Puede ser positivo o negativo. En este caso es menos cuatro. Esta expresión es equivalente a la expresión de acá arriba. Ahora, es raro que se encuentren con algo así. Se los muestro porque puede pasar pero por ahora enfóquense en entender el loop FOR como lo vimos originalmente. Que nos sirve para recorrer, básicamente, arreglos o hacer alguna ejecución varias veces. Por último hay unos comandos de escape que nos los vamos a ver en detalle. Se los voy a mencionar por si se encuentran con ellos que permiten terminar un ciclo. Ya sea un ciclo FOR o un ciclo WHILE. ¿Cuáles son estos? El comando continue y el comando break. ¿Qué hacen? Básicamente, el comando continue termina el ciclo actual y pasa al siguiente. Es decir, por ejemplo, yo estoy en un WHILE y tengo alguna condición tengo un código. Hay varias líneas de código. Y acá tengo el comando continue. Y acá hay otras líneas de código y después se cierra el corchete. Lo que hace es que si este comando se ejecuta, se salta todas estas líneas del código y va al final del ciclo. Y después sigue como siempre. Yo vuelvo aquí, reviso mi condición entro de nuevo, etcétera. Entonces, el comando continue lo único que hace es terminar ese ciclo. No el loop sino que el ciclo actual. En cambio, el comando break definitivamente se sale del loop. Termina el ciclo actual y no vuelve hacia arriba sino que de frentón pasa al resto del programa. Se los menciono. No se preocupen por esto. No lo vamos a usar nosotros. Podrían encontrarse con ello en ejemplos que busquen en Internet. Podrían eventualmente serles útiles y por eso los mencionamos. Eso es todo por hoy día. Muchas gracias.