Ejercicio: Creación de bucles iteración do y while
- 10 minutos
A primera vista, las instrucciones do-while y while son otra instrucción de iteración que permite recorrer en iteración un bloque de código y, de este modo, cambiar el flujo de ejecución del código. Sin embargo, una vez que examinamos cómo funciona cada uno, podemos identificar mejor los matices de cada instrucción de iteración y cuándo usarlos.
¿Qué es la instrucción do-while?
La do-while instrucción ejecuta una instrucción o un bloque de instrucciones mientras una expresión booleana especificada se evalúa como true. Dado que esa expresión se evalúa después de cada ejecución del bucle, un bucle do-while se ejecuta una o varias veces.
do
{
// This code executes at least one time
} while (true);
El flujo de ejecución comienza dentro de la llave. El código ejecuta al menos una vez y, a continuación, se evalúa la expresión booleana junto a la while palabra clave . Si la expresión booleana devuelve true, el bloque de código se ejecuta de nuevo.
Al codificar de forma rígida la expresión booleana en true, hemos creado un bucle infinito, un bucle que nunca finalizará, al menos, no como está escrito actualmente. Necesitaríamos una manera de salir del bucle dentro del bloque de código. Discutiremos los criterios de salida de un do-while dentro de un momento.
Bien, ahora vamos a preparar nuestro entorno de codificación y comenzar nuestro examen de ejemplos de código que implementan una do-while instrucción .
Preparación del entorno de creación de código
Este módulo incluye actividades prácticas que le guían por el proceso de compilación y ejecución de código de demostración. Le recomendamos que complete estas actividades con Visual Studio Code como entorno de desarrollo. El uso de Visual Studio Code para estas actividades le ayudará a familiarizarse con la escritura y la ejecución de código en un entorno de desarrollador que usan los profesionales de todo el mundo.
Abre Visual Studio Code.
Puede usar el menú Inicio de Windows (o un recurso equivalente para otro sistema operativo) para abrir Visual Studio Code.
En Visual Studio Code, en el menú Archivo, seleccione Abrir archivo.
En el cuadro de diálogo Abrir carpeta , vaya a la carpeta Escritorio de Windows.
Si tiene una ubicación de carpeta diferente donde guarda los proyectos de código, úsela. Para este curso, lo importante es tener una ubicación fácil de encontrar y recordar.
En el cuadro de diálogo Abrir carpeta, elija Seleccionar carpeta.
Si ve un cuadro de diálogo de seguridad en el que se le pregunta si confía en los autores, seleccione Sí.
En el menú Terminal de Visual Studio Code, seleccione Nuevo terminal.
Observe que una ventana de comandos en el panel del Terminal muestra la ruta de acceso de la carpeta actual. Por ejemplo:
C:\Users\someuser\Desktop>Nota:
Si está trabajando en su propio equipo, en lugar de en un entorno aislado u hospedado, y ha realizado otros módulos de Microsoft Learn de esta serie de C#, es posible que ya haya creado una carpeta de proyecto para ejemplos de código. Si ese es el caso, puede saltar al paso siguiente, que se usa para crear una aplicación de consola en la carpeta TestProject.
En la terminal, para crear una nueva aplicación de consola en una carpeta especificada, escriba el siguiente comando:
dotnet new console -o ./CsharpProjects/TestProjectEste comando de la CLI de .NET usa una plantilla de programa de .NET para crear un nuevo proyecto de aplicación de consola de C# en la ubicación de carpeta especificada. El comando crea las carpetas CsharpProjects y TestProject y usa TestProject como nombre del archivo
.csproj.Si se muestra un mensaje que indica que los archivos ya existen, continúe con los pasos siguientes. Reutilizará los archivos de proyecto existentes.
En la vista EXPLORER, expanda la carpeta CsharpProjects .
Debería ver la carpeta TestProject y dos archivos, un archivo de programa de C# denominado Program.cs y un archivo de proyecto de C# denominado TestProject.csproj.
En Visual Studio Code, en el menú Archivo, seleccione Abrir archivo.
En el cuadro de diálogo Abrir carpeta , seleccione la carpeta CsharpProjects y, a continuación, seleccione Seleccionar carpeta.
En la vista EXPLORER, expanda la carpeta TestProject y, a continuación, seleccione Program.cs.
Elimine las líneas de código existentes.
Usará este proyecto de consola de C# para crear, compilar y ejecutar ejemplos de código durante este módulo.
Cierre el panel del terminal.
Escritura de una instrucción do-while para salir cuando se genere un número aleatorio determinado
Vamos a escribir código que seguirá generando números aleatorios entre 1 y 10 hasta que generemos el número 7. Podría tomar solo una iteración para obtener un 7, o podría tomar docenas de iteraciones.
Asegúrese de que ha abierto Visual Studio Code y de que Program.cs se muestra en el panel Editor.
Nota:
Program.cs debe estar vacío. Si no es así, seleccione y elimine todas las líneas de código.
En el Editor de Visual Studio Code, escriba el código siguiente.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);En el menú Archivo de Visual Studio Code, seleccione Guardar.
El archivo Program.cs debe guardarse antes de compilar o ejecutar el código.
En el panel EXPLORER, para abrir un terminal en la ubicación de la carpeta TestProject, haga clic con el botón derecho en TestProject y, a continuación, seleccione Abrir en terminal integrado.
Se abrirá un panel del terminal. El terminal debe incluir un símbolo del sistema que muestre que dicho terminal está abierto en la ubicación de la carpeta TestProject.
En la ventana de comandos de Terminal, para ejecutar tu código, escribe dotnet run y presiona la tecla Enter.
Nota:
Si ve un mensaje que indica "No se ha podido encontrar un proyecto para ejecutar", asegúrese de que el símbolo del sistema del terminal muestra la ubicación de carpeta TestProject prevista. Por ejemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Revise la salida.
Dado que los números generados son aleatorios, los resultados serán diferentes. Sin embargo, el valor
7será el último número que se imprimirá, ya que la expresión booleana se evaluará comofalsecuando se genere el 7 y el flujo de ejecución salga del bloque de código.2 5 8 2 7Tómese un minuto para examinar el código.
Un aprendizaje clave para esta primera tarea es que el bloque de código de un
do-whilebucle se ejecutará al menos una vez. Podría iterar un gran número de veces y es poco probable que sepamos con antelación cuántas iteraciones habrá.También es importante tener en cuenta que el código dentro del bloque de código influye en si desea seguir iterando por el bloque de código o no. Un bloque de código que influye en los criterios de salida es una razón principal para seleccionar una
do-whileinstrucción owhileen lugar de una de las otras instrucciones de iteración. Tantoforeachcomofordependen de factores externos al bloque de código para determinar el número de iteraciones del bloque de código.
Escribe una instrucción 'while' que itere siempre que un número aleatorio sea mayor que algún valor.
Ahora, echemos un vistazo a la instrucción while.
Use el Editor de Visual Studio Code para actualizar el código de la manera siguiente:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");Nota:
En este caso, colocamos la
whilepalabra clave y la expresión booleana antes del bloque de código. Esto cambia el significado del código y actúa como una "puerta" que solo permite el paso del flujo de ejecución si la expresión booleana se evalúa como verdadero.Guarde el archivo de código y use Visual Studio Code para ejecutar el código.
Escriba
dotnet rundesde el símbolo del sistema de terminal para ejecutar el código.Revise los valores de salida enumerados.
Dado que los números son aleatorios, por lo que el código generará una secuencia diferente.
9 7 5 Last number: 1Tómese un minuto para examinar el código.
En el código superior, usamos
randompara inicializar laintvariable denominadacurrent. Nuestra siguiente línea de código activa es nuestrawhileinstrucción .Nuestra instrucción
whileiterará en función de la expresión booleana(current >= 3). No sabemos qué valor se asignará acurrent, pero hay posibilidades que afectan alwhilebucle:- Si
currentse inicializa en un valor mayor o igual que3, la expresión booleana devolverátruey el flujo de ejecución escribirá el bloque de código. Dentro del bloque de código, lo primero que hacemos es escribir el valor decurrenten la consola. A continuación, todavía dentro del bloque de código, se actualiza el valor decurrentcon un nuevo valor aleatorio. En este punto, el control vuelve a la parte superior de lawhileinstrucción donde se evalúa la expresión booleana. Este proceso continúa hasta que la expresión booleana devuelvefalsey el flujo de ejecución se interrumpe del bloque de código. - Si
currentse inicializa (en la parte superior del código) en un valor menor que3, la expresión booleana devolveráfalsey el bloque de código nunca se ejecutará.
La línea de código final escribe el valor de
currenta la consola. Este código se ejecuta independientemente de si el bloque de código de iteración se haya ejecutado o no, y nos brinda la oportunidad de imprimir el valor final decurrenten la consola.- Si
Usa la instrucción continue para ir directamente a la expresión booleana.
En ciertos casos, queremos cortocircuitar el resto del código en el bloque de código y continuar con la siguiente iteración. Podemos usar la instrucción continue para eso.
Use el Editor de Visual Studio Code para actualizar el código de la manera siguiente:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */Tómese un minuto para examinar el código.
Observe que hemos cambiado nuevamente a
do-while. Undo-whilegarantiza que el bucle iterará al menos una vez.Lo primero que hacemos dentro del bloque de código es asignar un nuevo valor aleatorio a
current. A continuación, se comprueba sicurrentes mayor o igual que8. Si esta expresión devuelvetrue, lacontinuepalabra clave transferirá el control al final del bloque de código ywhileevaluará(current != 7). Por lo tanto, el bucle seguirá iterando siempre que el valor decurrentno sea igual a7.La clave de este paso del ejercicio es la línea de código que contiene la
continuepalabra clave:if (current >= 8) continue;Dado que nuestro código que escribe el valor de
currenten la consola se encuentra después deif (current >= 8) continue;, nuestro código garantiza que un valor decurrentque sea mayor o igual que8nunca se escribirá en la ventana de salida.Vamos a probarlo.
Guarde el archivo de código y use Visual Studio Code para ejecutar el código.
Escriba
dotnet rundesde el símbolo del sistema de terminal para ejecutar el código.Revise los valores de salida enumerados.
5 1 6 7Es probable que vea resultados diferentes de los que se muestran a continuación. Sin embargo, no verá ningún valor
8o mayor en la ventana de salida antes de que finalice la ejecución del código con el valor7.Tenga en cuenta la diferencia entre las declaraciones
continueybreak.Como vio en este último paso, la
continueinstrucción transfiere la ejecución al final de la iteración actual. Este comportamiento es diferente del comportamiento que vimos con labreakinstrucción . Labreakinstrucción finaliza la iteración (oswitch) y transfiere el control a la instrucción que sigue a la instrucción terminada. Si no hay ninguna instrucción después de la instrucción terminada, el control se transfiere al final del archivo o método.
Resumen
Hay algunas ideas importantes que debe retener de esta lección.
- La
do-whileinstrucción recorre en iteración un bloque de código al menos una vez y puede seguir iterando en función de una expresión booleana. La evaluación de la expresión booleana normalmente depende de algún valor generado o recuperado dentro del bloque de código. - La
whileinstrucción evalúa primero una expresión booleana y continúa iterando por el bloque de código siempre que la expresión booleana se evalúe comotrue. - La palabra clave
continuepara avanzar inmediatamente a la expresión booleana.