Hola y bienvenido. En esta conferencia, me gustaría hablar sobre los bucles while y do while.
Hemos hablado del bucle for, que básicamente te permite repetir código.
Hay otras construcciones en c llamadas while y do while que hacen lo mismo
con una sintaxis diferente.
Entonces, el ciclo while el ciclo while es un mecanismo para repetir
un conjunto de declaraciones y permite que la ejecución continúe mientras una expresión lógica especificada se evalúe como verdadera.
Así que más de lo mismo aquí. Al igual que las sentencias if ejecutarán cierto
código, mientras que las sentencias ejecutarán cierto código basándose en una evaluación booleana varias veces.
Todo lo que puede hacer en el bucle for, puede hacerlo en el
bucle while, es solo una sintaxis diferente.
Entonces, el aspecto de los bucles while es algo como esto.
En un nivel muy alto, si estamos viendo un
pseudocódigo, mientras esta condición es verdadera, continúe haciéndolo.
Entonces, para relacionarlo con un ejemplo más mundial.
Básicamente, mientras tienes hambre, come sándwiches, algo así.
Entonces vas a repetir el código. Vas a seguir comiendo muchos bocadillos mientras tengas hambre.
La sintaxis general del ciclo while es la siguiente.
Y esto le muestra la sintaxis de una
declaración en el cuerpo, por lo que no necesita proporcionar corchetes o llaves.
Tiendo a usar los términos llaves y
corchetes en la misma terminología.
Así que así es como se ve la sintaxis cuando tiene una declaración frente a varias declaraciones.
Múltiples declaraciones, debe tener esos corchetes, una declaración
única que no tiene, son opcionales. No puede tenerlos o no tiene que tenerlos.
La expresión va entre paréntesis al igual que el bucle
for y la instrucción if. La expresión aquí es diferente
del bucle for en que es una condición de salida única.
Es solo la expresión. No inicializa la variable de control de bucle.
No modifica la variable de control de bucle entre paréntesis.
Es solo la expresión, solo la condición de salida.
La condición para la continuación del ciclo while se prueba al principio.
Así que esto es lo mejor.
Entonces, lo que esto significa es que es un ciclo de prueba previa. Y eso significa que
podría ejecutarse 0 veces o podría ejecutarse varias veces en el cuerpo.
Y nuevamente, esto será relevante porque el ciclo do while está haciendo algo un poco diferente.
Si la expresión comienza falsa, no se ejecutará ninguna de
las sentencias de bucle del cuerpo.
Por eso está en la prueba superior.
Entonces, si responde la primera pregunta no, no
tengo hambre, entonces nunca comerá sándwiches. Vas a seguir directamente con el café o
con la siguiente línea de código. No vas a entrar en el cuerpo del bucle.
Si la condición del bucle comienza como verdadera,
el cuerpo del bucle debe contener un mecanismo para cambiar esto
si el bucle va a terminar. De lo contrario, tendrás un bucle infinito.
Entonces, con el bucle for donde modifica la variable de control del bucle en una sola declaración, es lo
mismo en el bucle while excepto que debe hacerlo en el cuerpo.
El bucle while va a inicializar
la variable de control de bucle en algún lugar, y luego
se va a modificar dentro del cuerpo del código.
Entonces, como mencioné, el bucle while puede hacer todo lo que hace un bucle for, es solo una sintaxis diferente.
Y nuevamente, el bucle for es más corto. Puedes hacer todo en una línea,
mientras que en el ciclo while tienes que hacer esas 3 cosas en líneas separadas.
Entonces, en este ejemplo,
tenemos int count es igual a 0. Esta es la variable de control de bucle. Esto está fuera de la declaración de bucle while.
Si estuviera usando una instrucción for, esto iría dentro del ciclo for como antes del primer punto y coma.
Ahí es donde se inicializa la variable de control de bucle.
Luego tienes la palabra clave while y dentro del paréntesis la expresión booleana.
Esto sería equivalente al ciclo for, la segunda declaración justo
antes del segundo punto y coma.
Entonces, esto es lo que verifica como verdadero o falso. Y si es verdadero o falso, ingresa al cuerpo del bucle.
Si el recuento es menor que 5, entonces imprimirá el recuento.
La siguiente línea de código después de eso es muy importante,
el más más cuenta porque eso está modificando la variable de control de bucle.
Tienes que hacer esto más más contar o nunca saldrás del ciclo porque la condición en la parte
superior dice si la cuenta es menor que igual a 5. Si la cuenta siempre es igual a 1, tienes
un bucle infinito.
De modo que ese plus plus cuenta muy, muy importante.
Plus plus count recuerda es un operador de incremento.
Solo dice que la cuenta es igual a la cuenta más 1.
Este bucle se ejecutará 5 veces.
Se ejecutará con un recuento igual a 1, un recuento
igual a 2, un recuento igual a 3, un recuento igual a 4 y un recuento igual a 5.
Una vez que el recuento sea igual a 6, saldrá del ciclo y
no saldrá de más declaraciones en el cuerpo.
Nuevamente, debería pensar en términos del ciclo for.
Es solo la variable de control de bucle y la modificación de la variable
de control de bucle no está en la declaración del bucle real.
No está todo en una línea como en el bucle for.
Aquí hay otro ejemplo en el que se controla la lógica para finalizar el ciclo.
Entonces, en ese primer ejemplo aquí que mostré, este es un bucle de control de contador.
Siempre se ejecutará la misma cantidad de veces, que es 5.
En el siguiente ejemplo, este es un ejemplo en el que el bucle puede
ejecutarse 100 veces o 0 veces.
La condición que estamos evaluando aquí en nuestra tecla while donde num no es igual a
negativo 1 depende de lo que ingrese el usuario porque num
es lo que ingresa el usuario.
Entonces, este ciclo puede ejecutarse 0 veces, puede ejecutarse 100 veces.
Todo depende de la entrada del teclado.
Y esto se llama bucle de control centinela. No está controlado por contador.
Se basa en una lógica y una variable que puede cambiar.
Entonces, mientras num no es igual a menos 1 y luego num se
almacena el valor que ingresamos en el teclado.
Si el usuario nunca ingresa un 1 negativo en el teclado, este bucle nunca saldrá.
Así que el mismo tipo de sintaxis aquí con nuestro while.
Nuestra variable de control de bucle aquí es num. Inicializamos el 0 en la parte
superior, y luego leemos modificarlo para ver si vamos a ingresar al bucle según lo
que ingresó el usuario en el teclado.
Luego, dentro del paréntesis de la palabra clave while, la
revisamos para ver si es un 1 negativo.
Y luego, en el cuerpo del bucle while con los corchetes, no
es necesario que los corchetes estén allí porque hay una sola declaración, pero me gusta ponerlos allí.
Luego también leemos la siguiente entrada y la almacenamos en num.
Si el usuario ingresa un 1 negativo para la siguiente entrada, saltará del bucle.
Si no lo hacen, continuará ejecutándose y les pedirá que ingresen información.
Un bucle do while es un poco diferente del bucle
for en el bucle while porque se considera un bucle posterior a la prueba.
Entonces, en el ciclo while, el cuerpo se ejecuta mientras la condición es verdadera.
En el bucle do while, donde el cuerpo se ejecuta por primera vez incondicionalmente, el bucle
do while porque la prueba está en la parte
inferior significa que siempre ejecutará el bucle al menos una vez.
Siempre vas a ejecutar el cuerpo una
vez al menos, podría ser más, pero siempre es una, nunca es 0.
Porque la condición para probar la salida está en la parte inferior.
A esto se le llama ciclo posterior a la prueba. También se llama bucle de salida controlada.
Por lo tanto, usaría el bucle do a while si quisiera que el bucle ingresara
al menos una vez.
Por lo general, no es necesario utilizar un bucle do
while porque aún puede hacer lo mismo en un bucle for si lo desea,
simplemente debe colocar el código fuera del bucle.
Entonces, el ciclo do while no es realmente necesario, pero hay casos en los que quizás quieras usarlo.
Después de la ejecución inicial, el cuerpo
solo se ejecuta mientras la condición sea verdadera. Entonces, después de la primera iteración del
bucle, actuará como bucles normales. Saltará si la condición es falsa.
Así que así es como se ve. El hacer está en la parte superior y
luego la prueba de la condición está en la parte inferior con la palabra clave while.
Entonces, haz es una
nueva palabra clave y luego tendrás corchetes o no corchetes dependiendo de
si tienes o no múltiples declaraciones en el cuerpo.
Si solo tiene una sola declaración en el cuerpo, no tendrá un corchete. Solo tendrás que hacer en la parte superior
y luego tendrás el tiempo en la parte inferior del bucle.
Y dentro del while, entre paréntesis, tendrás la evaluación booleana que será
la condición que verifiques. Pero nuevamente, debido a
que esa condición está en la parte inferior, siempre se garantiza que ejecutará la declaración al menos una vez.
Entonces, el ejemplo de la izquierda es una declaración, el ejemplo de
la derecha son declaraciones múltiples. Entonces tienes los corchetes, las llaves.
Y nuevamente, en este segundo ejemplo, está diciendo que puede tener algo como solicitar la contraseña, leer la entrada del
usuario y mientras la entrada no es igual a la contraseña.
Pero siempre solicitará esa contraseña al menos una vez.
Entonces, otro ejemplo de hacer un bucle while.
El primer ejemplo superior aquí es un ejemplo de
cómo el bucle puede
ejecutarse una o muchas veces, pero nunca 0.
Todo depende de lo que ingrese el usuario. Siempre se ejecutará al menos una vez, pero se
trata de leer la entrada del teclado. Vemos la función scanf.
Y mientras el usuario no ingrese 20,
ejecutará este ciclo.
Un ciclo while también puede ser un ciclo de control de contador, lo que significa que se ejecutará una cierta cantidad de veces.
En este caso, se ejecutará 4 veces en este ejemplo.
Tenemos int número igual a 4. Y luego tenemos hacer en la parte
superior, y
luego tenemos los corchetes porque tenemos múltiples declaraciones dentro del cuerpo.
Y estamos incrementando esa variable de control de bucle dentro del cuerpo, número más más.
Y luego, la condición para la verificación aún está en la parte inferior. Entonces vas a ejecutar esto 4 veces.
Y notará que la palabra clave while no tiene que estar en la misma línea que la llave derecha.
Sin embargo, normalmente lo es, pero no tiene por qué serlo.
Y la palabra clave while en la parte inferior también termina en punto y coma, también debería notar eso.
Así que hemos aprendido todo sobre estos bucles; el bucle for, el while y el do while.
¿Qué bucles debería utilizar?
Bueno, lo primero que tienes que decidir sobre qué bucle quieres usar es primero, ¿quieres que sea
una prueba previa o una prueba posterior? ¿Quieres que se ejecute al menos una vez o no
quieres que se ejecute al menos una vez? Si desea que se ejecute al
menos una vez, entonces usará la función do while. Si esa no es una
condición, puede usar el for o the while o el do while.
Entonces, en su mayor parte, cuando decida qué bucle usar, siempre será
un bucle de prueba previa. Debes mantenerte alejado del bucle do while.
Es una mejor opción en la mayoría de los casos. Es mucho más fácil de leer.
Es mucho mejor mirar antes de hacer un bucle.
Simplemente no empieces a hacer bucles, es mejor comprobar esa condición en la parte superior.
En aras de la legibilidad, si el bucle está en la prueba, es mucho más intuitivo.
Así que haga que el bucle se verifique al principio, use a durante o un tiempo.
Y en muchos casos, es importante que el ciclo se omita por completo si la prueba no se cumple inicialmente.
Nuevamente, debido a que ese es el caso, la prueba debería estar en la parte superior. No siempre deberías ejecutar al menos una vez.
En su mayor parte, es posible que no siempre desee ejecutar.
Entonces deberías usar un por un tiempo.
Ahora la pregunta se reduce a cuál debería usar, por un tiempo.
Realmente es una cuestión de preferencia personal. No importa porque, como dije al
principio de esta conferencia, todo lo que puedes hacer en un tiempo, lo puedes hacer en un por.
Entonces, si simplemente le gusta más el bucle for, el for es un poco más
rápido a veces porque toda la modificación del control del bucle y la inicialización y la
condición de salida pueden estar en una línea.
Pero realmente depende de ti.
Normalmente, lo que hago es usar el bucle for para bucles controlados por contador.
Pero de nuevo, puedes usar el mismo. Si realmente desea usar un bucle
for y hacer que parezca un tiempo, simplemente no
tiene la primera y la tercera expresión,
solo tiene la única. Entonces, el punto y coma de las pruebas de punto y coma es el mismo que el de la prueba while.
Entonces, esto solo le muestra que el for in the while puede hacer lo mismo, solo cambie
un poco la sintaxis.
Si realmente desea usar un bucle while pero quiere que actúe como un bucle
for, entonces lo prefijo con la inicialización e incluiría las declaraciones de actualización en el cuerpo.
Entonces, lo que haría es algo como esto y generalmente siempre lo hace durante un ciclo de tiempo.
Pero este es el equivalente a un bucle for. La inicialización está fuera del bucle de
la variable de control, la variable de control del bucle.
La condición de la prueba está entre paréntesis, y
luego está actualizando esa variable de control de bucle en el cuerpo del bucle while.
Y eso es lo mismo que la actualización de la prueba de inicialización del bucle for
y luego el cuerpo. No hay diferencia.
Nuevamente, como mencioné, uso el bucle for, tal vez para bucles de control de contador un poco más.
Pero usaré tanto el for como el while indistintamente, dependiendo de cómo me sienta ese día.
Por lo tanto, un bucle for podría ser un poco más apropiado
si desea inicializar y actualizar una variable en una línea.
Un ciclo while es mejor cuando las condiciones son distintas.
Una vez más, el control de contador realiza bucles para, los bucles de control centinela tal vez el bucle while.
Y aquí hay un ejemplo de un bucle while con un bucle de control centinela
y un bucle for que hace lo mismo otra vez o un bucle for para un control de contador.
Si bien el bucle puede ejecutarse muchas veces según
lo que ingrese el usuario, el bucle for está controlado por contador.
Así que este es el while en el do while. Con suerte, esto está claro.
Familiarícese con estos bucles porque a menudo desea repetir el código.
En la charla un poco sobre los bucles anidados y también algunos
mecanismos diferentes para salir de un bucle usando un descanso
o continuar. Gracias.