Ejercicio: Creación de lógica de decisión con instrucciones if
- 19 minutos
La mayoría de las aplicaciones incluyen un gran número de rutas de acceso de ejecución. Por ejemplo, una aplicación podría implementar diferentes rutas de ejecución en función de la opción de menú que seleccione un usuario. Los desarrolladores hacen referencia al código que implementa diferentes rutas de acceso de ejecución como ramas de código.
La instrucción más utilizada para crear bifurcaciones de código es if. La instrucción if se basa en una expresión booleana que se incluye entre paréntesis. Si la expresión es verdadera, se ejecutará el código que sigue a la instrucción if. De lo contrario, el entorno de ejecución de .NET omitirá el código y no lo ejecutará.
En este ejercicio, practicará la escritura de instrucciones if mediante la creación de un juego. Primero definirá las reglas del juego y las implementarás en el código.
Usará el método Random.Next() para simular el lanzamiento de tres dados de seis caras. Para calcular la puntuación, evaluará los valores obtenidos. Si la puntuación es mayor que un total arbitrario, se mostrará un mensaje de éxito al usuario. Si la puntuación está por debajo del límite, se mostrará un mensaje de fracaso al usuario.
- Si dos dados cualesquiera muestran el mismo valor, se obtienen dos puntos extra por obtener un doble.
- Si los tres dados muestran el mismo valor, se obtienen seis puntos extra por obtener un triple.
- Si la suma de los tres dados, junto con los puntos extra, es igual o mayor que 15, gana el juego. De lo contrario, pierde.
A medida que obtenga más información sobre la instrucción if, podrá refinar las reglas.
Importante
En este ejercicio se usa ampliamente la clase System.Random. Puede consultar el módulo de Microsoft Learn "Llamada a métodos desde la biblioteca de clases .NET mediante C#" si necesita recordar cómo funciona Random.Next().
Preparación del entorno de programación
Este módulo incluye actividades que le guiarán por el proceso de compilación y ejecución de código de ejemplo. Se recomienda realizar las 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 desarrollo que usan profesionales de todo el mundo.
Abra Visual Studio Code.
Puede usar el menú Inicio de Windows (o un recurso equivalente en otro sistema operativo) para abrir Visual Studio Code.
En el menú Archivo de Visual Studio Code, seleccione Abrir carpeta.
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 ejercicio, lo importante es tener una ubicación fácil de encontrar y recordar.
En el cuadro de diálogo Abrir carpeta , seleccione Seleccionar carpeta.
Si ve un cuadro de diálogo de seguridad que pregunta si confía en los autores, seleccione Sí.
En el menú Terminal de Visual Studio Code, seleccione Nuevo terminal.
Observe que el símbolo del sistema 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 este es el caso, puede omitir el siguiente paso, que es 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 el menú Archivo de Visual Studio Code, seleccione Abrir carpeta.
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 que contiene.
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 código que genera tres números aleatorios y los muestre en la salida
Asegúrese de que tiene un archivo Program.cs vacío abierto en Visual Studio Code.
Para crear el código inicial de este ejercicio, escriba lo siguiente:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");Dedique un minuto a revisar el código que está ejecutando.
Para empezar, cree una nueva instancia de la clase
System.Randomy almacene una referencia al objeto en una variable denominadadice. A continuación, llamamos al métodoRandom.Next()en el objetodicetres veces y proporcionamos los límites inferior y superior para limitar los valores posibles entre1y6(el límite superior es exclusivo). Guardamos los tres números aleatorios en las variablesroll1,roll2yroll3, respectivamente.A continuación, se suman los tres dados y se guarda el valor en una variable entera denominada
total.Por último, use el método
WriteLine()para mostrar los tres valores mediante la interpolación de cadenas.Al ejecutar el código, debería ver el mensaje que se indica a continuación (los números serán diferentes).
Dice roll: 4 + 5 + 2 = 11Esta primera tarea era de configuración. Ahora, puede agregar la lógica de decisión en nuestro código para que el juego sea más interesante.
Incorporación de una instrucción if para mostrar diferentes mensajes según el valor de la variable total
En el editor de Visual Studio Code, busque el cursor en la parte inferior del archivo de código y cree una línea de código en blanco.
Para crear tu primera característica de juego, escribe las siguientes instrucciones
if.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Estas dos instrucciones
ifse usan para administrar los escenarios de éxito y fracaso. Dedique un minuto a examinar la primera instrucciónif.Observe que la instrucción
iftiene tres partes:- La palabra clave
if. - Expresión booleana entre paréntesis
() - Un bloque de código delimitado por llaves
{ }
En tiempo de ejecución, se evalúa la expresión booleana
total > 14. Si se trata de una instrucción verdadera (el valor detotales mayor que14), el flujo de ejecución continuará con el código definido en el bloque de código. En otras palabras, se ejecutará el código entre llaves.Sin embargo, si la expresión booleana es falsa (el valor de
totalno es mayor que14), el flujo de ejecución omitirá el bloque de código. En otras palabras, no se ejecutará el código entre llaves.Por último, la segunda instrucción
ifcontrola el mensaje si el usuario pierde. En la unidad siguiente, usaremos una variación en la instrucciónifpara acortar estas dos instrucciones en una sola y expresar con mayor claridad nuestra intención.- La palabra clave
¿Qué es una expresión booleana?
Una expresión booleana es cualquier código que devuelve un valor booleano, ya sea true o false. Las expresiones booleanas más simples son los valores true y false. Como alternativa, una expresión booleana podría ser el resultado de un método que devuelve los valores true o false. Por ejemplo, a continuación, se muestra un ejemplo de código sencillo que usa el método string.Contains() para evaluar si una cadena contiene otra.
string message = "The quick brown fox jumps over the lazy dog.";
bool result = message.Contains("dog");
Console.WriteLine(result);
if (message.Contains("fox"))
{
Console.WriteLine("What does the fox say?");
}
Como message.Contains("fox") devuelve un valor true o false, cumple los requisitos de una expresión booleana y se puede usar en una instrucción if.
Se pueden crear otras expresiones booleanas simples mediante el uso de operadores para comparar dos valores. Los operadores incluyen:
==, el operador "igual que" para probar la igualdad>, el operador "mayor que" para probar si el valor a la izquierda es mayor que el valor a la derecha<, el operador "menor que" para probar si el valor a la izquierda es menor que el valor a la derecha>=, el operador "mayor o igual que"<=, el operador "menor o igual que"- Etcétera.
Nota
La serie de aprendizaje basado en C# de Microsoft Learn dedica un módulo completo a las expresiones booleanas. Hay muchos operadores que se pueden usar para crear una expresión booleana, pero en este módulo solo se tratarán algunos operadores básicos. Para más información sobre las expresiones booleanas, consulte el módulo de Microsoft Learn "Evaluación de expresiones booleanas para tomar decisiones en C#".
En este ejemplo, hemos evaluado la expresión booleana total > 14. Sin embargo, se podría haber elegido la expresión booleana total >= 15 porque, en este caso, son lo mismo. Las reglas del juego especifican que "si la suma de los tres dados y cualquier punto extra, es igual a 15 puntos o más, se ganará el juego". Por lo que probablemente debería implementar la expresión >= 15. En el siguiente paso del ejercicio, se llevará a cabo ese cambio.
¿Qué es un bloque de código?
Un bloque de código es una colección de una o varias líneas de código delimitadas por un símbolo de llave de apertura y otro de cierre { }. Representa una unidad completa de código que tiene una única finalidad en nuestro sistema de software. En este caso, en tiempo de ejecución, se ejecutan todas las líneas de código del bloque de código si la expresión booleana es verdadera. Por el contrario, si la expresión booleana es falsa, se omiten todas las líneas de código del bloque de código.
También debe saber que los bloques de código pueden contener más bloques de código. De hecho, es habitual que un bloque de código esté "anidado" en otro bloque de código en las aplicaciones. Para comenzar, anidará sus propios bloques de código más adelante en este módulo al crear una instrucción if dentro de otro bloque de código.
Nota
La serie de aprendizaje basada en C# de Microsoft Learn dedica un módulo completo a comprender los bloques de código. Los bloques de código son fundamentales para comprender la organización y la estructura del código, y definen los límites del ámbito de la variable. Para más información sobre bloques de código,vea el módulo "Control de la lógica y el ámbito de las variables mediante bloques de código en C#".
Incorporación de otra instrucción if para implementar puntos extra por obtener dobles
A continuación, puede a implementar la siguiente regla: "Si dos dados cualesquiera muestran el mismo valor, se obtendrán dos puntos extra por obtener dobles". Modifique el código del paso anterior para que coincida con la lista de códigos siguiente:
En el editor de Visual Studio Code, busque el cursor en la línea de código en blanco encima de la primera instrucción
if.Para crear la característica de juego "dobles", escriba la siguiente instrucción
if.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }Aquí se combinarán tres expresiones booleanas para crear una expresión booleana compuesta en una sola línea de código. A veces se denomina condición compuesta. Cuenta con un conjunto externo de paréntesis que combina tres conjuntos internos de paréntesis separados por dos caracteres de barra vertical.
Los caracteres de barra vertical
||son el operador O lógico, que básicamente indica “la expresión a la izquierda O la expresión a la derecha deben ser verdaderas para que toda la expresión booleana sea verdadera”. Si ambas expresiones booleanas son falsas, toda la expresión booleana será falsa. A continuación, usará dos operadores lógicos "O" para ampliar la evaluación a una tercera expresión booleana.En primer lugar, evaluará
(roll1 == roll2). Si es verdadera, la expresión completa es verdadera. Si la expresión es falsa, evaluará(roll2 == roll3). Si es verdadera, la expresión completa es verdadera. Si la expresión es falsa, evaluará(roll1 == roll3). Si es verdadera, la expresión completa es verdadera. Si es falsa, la expresión completa es falsa.Si la expresión booleana compuesta es verdadera, ejecutará el bloque de código siguiente. En esta ocasión, hay dos líneas de código. La primera línea de código imprime un mensaje al usuario. La segunda línea de código incrementa el valor de
totalen2.Para mejorar la legibilidad del código, actualice la segunda instrucción
ifde la siguiente manera:if (total >= 15)Observe que ahora usa el operador
>=en la expresión que se usa para evaluar una tirada ganadora. El operador>=significa "mayor o igual que". Como consecuencia, podrá comparartotalcon un valor15en lugar de14. Con estos cambios, la expresión que se usa para evaluar una tirada ganadora ahora es similar a la expresión que se evalúa para una tirada perdedora. Esto debería facilitar la comprensión del código (legibilidad). Dado que se trabaja con valores enteros, la nueva expresión(total >= 15)funcionará de forma similar a la que escribió anteriormente(total > 14).Tómese un minuto para examinar el código.
El código debería coincidir con este de aquí:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }Observe la mejor alineación entre las expresiones usadas para evaluar las tiradas ganadoras y perdedoras.
Incorporación de otra instrucción if para implementar los puntos extra por obtener triples
A continuación, puede implementar la siguiente regla: "Si los tres dados que tire muestran el mismo valor, obtendrá seis puntos extra por obtener un triple". Modifique el código de los pasos anteriores para que coincida con la siguiente lista de códigos:
En el editor de Visual Studio Code, cree una línea de código en blanco debajo del bloque de código de la instrucción
if"dobles".Para crear la característica de juego "triples", escriba la siguiente instrucción
if.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }Ahora combinará dos expresiones booleanas para crear una expresión booleana compuesta en una sola línea de código. Cuenta con un conjunto externo de paréntesis que combina dos conjuntos internos de paréntesis separados por dos caracteres de "Y" comercial.
Los caracteres
&&de Y comercial son el operador Y lógico, que básicamente indica “solo si ambas expresiones son verdaderas, la expresión completa es verdadera”. En este caso, siroll1es igual aroll2, yroll2es igual aroll3, entonces, por deducciónroll1, debe ser igual aroll3y el usuario ha sacado triples.En el menú Archivo de Visual Studio Code, haga clic en Guardar.
Tómese un minuto para examinar el código.
Asegúrese de que el código coincida con lo siguiente:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }En la vista 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.
Debe abrirse un panel de terminal y debe incluir un símbolo del sistema que muestre que el terminal está abierto en la ubicación de la carpeta TestProject.
En el símbolo del sistema del terminal, para ejecutar el código, escriba dotnet run y presione Intro.
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>Debería ver una salida con resultados similares a los siguientes:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose.O esto:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose.O esto:
Dice roll: 5 + 6 + 4 = 15 You win!O bien, si tiene suerte, verá lo siguiente:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!Pero ¿realmente se debería premiar al jugador por los puntos extra por la obtención de dobles y triples? Después de todo, una tirada de triples implica que también se lograron dobles. Lo ideal es que los bonos no se acumulen. Deberían darse dos condiciones por separado con los puntos extra. Se trata de un error en la lógica que deberá corregirse.
Problemas con la lógica y oportunidades para mejorar el código
Aunque esta es una buena forma de comenzar y ha aprendido mucho sobre la instrucción if, las expresiones booleanas, los bloques de código, los operadores lógicos O, Y, etc., se pueden mejorar muchas cosas. Lo hará en la unidad siguiente.
Resumen
- Use una instrucción
ifpara crear una rama en la lógica del código. La instrucción de decisiónifejecutará el código en su bloque de código si su expresión booleana es verdadera. De lo contrario, el runtime omitirá el bloque de código y continuará con la siguiente línea de código después de este. - Una expresión booleana es cualquier expresión que devuelve un valor booleano.
- Los operadores booleanos compararán los dos valores a la izquierda y a la derecha para ver si son iguales, para compararlos, etc.
- Un bloque de código está delimitado por llaves
{ }. Recopila líneas de código que deben tratarse como una sola unidad. - El operador Y lógico,
&&, agrega dos expresiones y ambas subexpresiones deben ser verdaderas para que toda la expresión sea verdadera. - El operador O lógico,
||, agrega dos expresiones y si alguna de las subexpresiones es verdadera, toda la expresión lo es también.