Exercício - Crie lógica de decisão com instruções if

Concluído

A maioria dos aplicativos inclui um grande número de caminhos de execução. Por exemplo, um aplicativo pode implementar diferentes caminhos de execução com base na opção de menu selecionada pelo usuário. Os desenvolvedores referem-se ao código que implementa diferentes caminhos de execução como ramificações de código.

A instrução de ramificação de código mais usada é a if instrução. A instrução if baseia-se numa expressão booleana que é colocada num conjunto de parênteses. Se a expressão for true, o código após a if instrução será executado. Caso contrário, o tempo de execução do .NET ignora o código e não o executa.

Neste exercício, você praticará a escrita if de declarações criando um jogo. Primeiro você definirá as regras do jogo, depois as implementará em código.

Você usará o método para simular o Random.Next() lançamento de três dados de seis lados. Você avaliará os valores rolados para calcular a pontuação. Se a pontuação for maior do que um total arbitrário, você exibirá uma mensagem vencedora para o usuário. Se a pontuação estiver abaixo do ponto de corte, você exibirá uma mensagem de perda para o usuário.

  • Se dois dos dados que lançar obtiverem o mesmo valor, receberá dois pontos de bónus pelo lançamento duplo.
  • Se os três dados que lançar obtiverem o mesmo valor, receberá seis pontos de bónus pelo lançamento triplo.
  • Se a soma dos três dados, além de qualquer bónus, for igual a 15 ou superior, ganhará o jogo. Caso contrário, perderá.

Você refinará as regras à medida que souber mais sobre a if declaração.

Importante

Este exercício faz uso extensivo da System.Random classe. Você pode consultar o módulo do Microsoft Learn intitulado "Chamar métodos da biblioteca de classes .NET usando C#" se precisar de uma atualização de como Random.Next() funciona.

Prepare seu ambiente de codificação

Este módulo inclui atividades que o guiam através do processo de criação e execução de código de exemplo. Você é incentivado a concluir essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code para essas atividades ajudará você a se sentir mais confortável escrevendo e executando código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.

  1. Abra o Visual Studio Code.

    Você pode usar o menu Iniciar do Windows (ou recurso equivalente para outro sistema operacional) para abrir o Visual Studio Code.

  2. No menu Arquivo de código do Visual Studio, selecione Abrir pasta.

  3. Na caixa de diálogo Abrir pasta, navegue até a pasta Área de trabalho do Windows.

    Se você tiver um local de pasta diferente onde você mantém projetos de código, você pode usar esse local de pasta em vez disso. Para este treinamento, o importante é ter um local que seja fácil de localizar e lembrar.

  4. Na caixa de diálogo Abrir pasta, selecione Selecionar pasta.

    Se vir uma caixa de diálogo de segurança a perguntar se confia nos autores, selecione Sim.

  5. No menu Terminal de código do Visual Studio, selecione Novo terminal.

    Observe que um prompt de comando no painel Terminal exibe o caminho da pasta para a pasta atual. Por exemplo:

    C:\Users\someuser\Desktop>
    

    Nota

    Se você estiver trabalhando em seu próprio PC em vez de em uma área restrita ou ambiente hospedado e tiver concluído outros módulos do Microsoft Learn nesta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você pode pular a próxima etapa, que é usada para criar um aplicativo de console na pasta TestProject.

  6. No prompt de comando do Terminal, para criar um novo aplicativo de console em uma pasta especificada, digite dotnet new console -o ./CsharpProjects/TestProject e pressione Enter.

    Este comando da CLI do .NET usa um modelo de programa .NET para criar um novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do seu .csproj arquivo.

  7. No painel EXPLORER, expanda a pasta CsharpProjects .

    Você deve ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto C# chamado TestProject.csproj.

  8. No painel EXPLORER, para exibir seu arquivo de código no painel Editor, selecione Program.cs.

  9. Exclua as linhas de código existentes.

    Você usará este projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.

  10. Feche o painel Terminal.

Escreva o código que gera três números aleatórios e os exibe na saída

  1. Verifique se você tem um arquivo .cs programa vazio aberto no Visual Studio Code.

  2. Para criar o código inicial para este exercício, insira o seguinte:

    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}");
    
    
  3. Reserve um minuto para rever o código que introduziu.

    Para começar, crie uma nova instância da System.Random classe e armazene uma referência ao objeto em uma variável chamada dice. Em seguida, você chama o Random.Next()dice método no objeto três vezes, fornecendo os limites inferior e superior para restringir os valores possíveis entre 1 e 6 (o limite superior é exclusivo). Salve os três números aleatórios nas variáveis roll1, , e , roll2roll3respectivamente.

    Em seguida, você soma os três rolos de dados e salva o valor em uma variável inteira chamada total.

    Finalmente, você usa o WriteLine() método para exibir os três valores usando interpolação de cadeia de caracteres.

    Ao executar o código, deverá ver a seguinte mensagem (os números serão diferentes).

    Dice roll: 4 + 5 + 2 = 11
    
    

    Esta primeira tarefa foi uma tarefa de configuração. Agora, você pode adicionar a lógica de decisão ao seu código para tornar o jogo mais interessante.

Adicionar uma instrução if para exibir mensagens diferentes com base no valor da variável total

  1. No Editor de Códigos do Visual Studio, localize o cursor na parte inferior do arquivo de código e crie uma linha de código em branco.

  2. Para criar seu primeiro recurso de jogo, insira as instruções a seguir if .

    if (total > 14)
    {
        Console.WriteLine("You win!");
    }
    
    if (total < 15)
    {
        Console.WriteLine("Sorry, you lose.");
    }
    

    Estas duas if declarações são usadas para lidar com os cenários de vitória e derrota. Reserve um minuto para examinar a primeira if declaração.

    Note-se que a if declaração é composta por três partes:

    • A palavra-chave if
    • Uma Expressão booleana entre parênteses ()
    • Um bloco de código definido por chavetas { }

    No tempo de execução, é avaliada a Expressão booleana total > 14. Se esta for uma instrução true (se o valor de for maior que 14), então o fluxo de execução continuará no código definido no bloco de total código. Por outras palavras, executará o código entre chavetas.

    No entanto, se a expressão booleana for false (o valor de não maior que 14), o fluxo de execução ignorará o bloco de total código. Ou seja, não executará o código entre chavetas.

    Por fim, a segunda instrução if controla a mensagem se o utilizador perder. Na próxima unidade, você usará uma variação na if instrução para encurtar essas duas declarações em uma única declaração que expresse mais claramente a intenção.

O que é uma Expressão booleana?

Uma expressão booleana é qualquer código que retorna um valor booleano, ou truefalse. As expressões booleanas mais simples são simplesmente os valores true e false. Como alternativa, uma expressão booleana pode ser o resultado de um método que retorna o valor true ou false. Por exemplo, aqui está um exemplo de código simples com o método string.Contains() para avaliar se uma cadeia de carateres contém outra cadeia de carateres.

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 o message.Contains("fox") retorna um true ou false valor, ele se qualifica como uma expressão booleana e pode ser usado em uma if instrução.

Outras expressões booleanas simples podem ser criadas usando operadores para comparar dois valores. Os operadores incluem:

  • ==, o operador "iguais", para testar a igualdade
  • >, o operador "maior que", para testar se o valor à esquerda é maior do que o valor à direita
  • <, o operador "menos que", para testar se o valor à esquerda é menor do que o valor à direita
  • >=, que é “maior que ou igual ao operador”
  • <=, que é “menor que ou igual ao operador”
  • E assim sucessivamente

Nota

A série de treinamento em C# no Microsoft Learn dedica um módulo inteiro às expressões booleanas. Há muitos operadores que você pode usar para construir uma expressão booleana, e você abordará apenas alguns dos conceitos básicos aqui neste módulo. Para obter mais informações sobre expressões booleanas, consulte o módulo do Microsoft Learn intitulado "Avaliar expressões booleanas para tomar decisões em C#".

Neste exemplo, você avaliou a expressão total > 14booleana . No entanto, você poderia ter escolhido a expressão total >= 15 booleana porque, neste caso, eles são os mesmos. Dado que as regras do jogo especificam "Se a soma dos três dados, mais quaisquer bônus, for 15 ou maior, você ganha o jogo", você provavelmente deve implementar a >= 15 expressão. Você fará essa alteração na próxima etapa do exercício.

O que é um bloco de código?

Um bloco de código é uma coleção de uma ou mais linhas de código que são definidas por chavetas { }. Ele representa uma unidade completa de código que tem uma única finalidade em seu sistema de software. Neste caso, no runtime, todas as linhas de código no bloco de código serão executadas se a Expressão booleana for verdadeira. Por outro lado, se a expressão booleana for falsa, todas as linhas de código no bloco de código serão ignoradas.

Você também deve saber que os blocos de código podem conter outros blocos de código. Na verdade, é comum que um bloco de código seja "aninhado" dentro de outro bloco de código em seus aplicativos. Você começará a aninhar seus próprios blocos de código posteriormente neste módulo quando criar uma if instrução dentro do bloco de código de outra.

Nota

A série de treinamento em C# no Microsoft Learn dedica um módulo inteiro à compreensão de blocos de código. Os blocos de código são fundamentais para entender a organização e a estrutura do código e definem os limites do escopo variável. Consulte o módulo [Control variable scope and logic using code blocks in C#](TBD).

Adicionar outra declaração if para implementar o bônus de duplas

Em seguida, você pode implementar a regra: "Se quaisquer dois dados que você rolar resultarem no mesmo valor, você ganha dois pontos de bônus por rolar duplas". Modifique o código do passo anterior para corresponder à seguinte listagem de código:

  1. No Editor de Códigos do Visual Studio, localize o cursor na linha de código em branco acima da primeira if instrução.

  2. Para criar seu recurso de jogo "duplos", insira a seguinte if instrução.

    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
    {
        Console.WriteLine("You rolled doubles! +2 bonus to total!");
        total += 2;
    }
    
    

    Aqui você combina três expressões booleanas para criar uma expressão booleana composta em uma única linha de código. Por vezes, denominada condição composta. Você tem um conjunto externo de parênteses que combina três conjuntos internos de parênteses separados por dois caracteres de tubo.

    Os carateres de barra vertical duplos || são o operador lógico OU, que basicamente diz “a expressão à minha esquerda OU a expressão à minha direita tem de ser verdadeira para que toda a Expressão booleana seja verdadeira”. Se ambas as expressões booleanas são falsas, então toda a expressão booleana é falsa. Você usa dois operadores lógicos OR para que possa estender a avaliação para uma terceira expressão booleana.

    Primeiro, você avalia (roll1 == roll2). Se for verdadeira, toda a expressão será verdadeira. Se for falso, você avalia (roll2 == roll3). Se for verdadeira, toda a expressão será verdadeira. Se for falso, você avalia (roll1 == roll3). Se for verdadeira, toda a expressão será verdadeira. Se for falsa, toda a expressão será falsa.

    Se a expressão booleana composta for true, execute o seguinte bloco de código. Desta vez, há duas linhas de código. A primeira linha de código publica uma mensagem destinada ao utilizador. A segunda linha de código incrementa o valor de total em 2.

  3. Para melhorar a legibilidade do seu código, atualize a segunda if instrução da seguinte maneira:

    if (total >= 15)
    

    Observe que agora você está usando o >= operador na expressão usada para avaliar um rolo vencedor. O >= operador significa "maior ou igual a". Como resultado, você pode comparar total com um valor de em vez 14de 15 . Com essas alterações, a expressão que você usa para avaliar um rolo vencedor agora se assemelha à expressão que você avalia para um rolo perdedor. Isso deve ajudar a tornar seu código mais fácil de entender (mais legível). Como você está lidando com valores inteiros, sua nova expressão (total >= 15) funcionará de forma idêntica ao que você escreveu anteriormente (total > 14).

  4. Reserve um minuto para rever o seu código.

    O código deve corresponder ao seguinte:

    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 o melhor alinhamento entre as expressões usadas para avaliar os rolos vencedores e perdedores.

Adicione outra declaração if para implementar o bônus triplo

Em seguida, você pode implementar a regra: "Se todos os três dados que você rolar resultarem no mesmo valor, você ganha seis pontos de bônus por rolar triplos." Modifique o código das etapas anteriores para corresponder à seguinte listagem de código:

  1. No Editor de Códigos do Visual Studio, crie uma linha de código em branco abaixo do bloco de código da instrução "doubles if ".

  2. Para criar seu recurso de jogo "triplos", insira a seguinte if instrução.

    if ((roll1 == roll2) && (roll2 == roll3)) 
    {
        Console.WriteLine("You rolled triples! +6 bonus to total!");
        total += 6;
    }
    
    

    Aqui você combina duas expressões booleanas para criar uma expressão booleana composta em uma única linha de código. Você tem um conjunto externo de parênteses que combina dois conjuntos internos de parênteses separados por dois caracteres e comerciais.

    Os carateres duplos de E comercial && são o operador lógico E, que basicamente diz “só se ambas as expressões forem verdadeiras, toda a expressão será verdadeira”. Neste caso, se roll1 for igual a roll2 e roll2 for igual a roll3, por dedução, roll1 deverá ser igual a roll3 e o utilizador obteve um lançamento triplo.

  3. No menu Arquivo de código do Visual Studio, clique em Salvar.

  4. Reserve um minuto para rever o seu código.

    Certifique-se de que seu código corresponda ao seguinte:

    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.");
    }
    
    
  5. No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.

    Um painel Terminal deve ser aberto e deve incluir um prompt de comando mostrando que o Terminal está aberto para o local da pasta TestProject.

  6. No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.

    Nota

    Se você vir uma mensagem dizendo "Não foi possível encontrar um projeto para executar", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    Você verá uma saída semelhante a um dos seguintes resultados:

    Dice roll: 3 + 6 + 1 = 10
    Sorry, you lose.
    
    

    Ou, assim:

    Dice roll: 1 + 4 + 4 = 9
    You rolled doubles! +2 bonus to total!
    Sorry, you lose.
    
    

    Ou, assim:

    Dice roll: 5 + 6 + 4 = 15
    You win!
    
    

    Ou, se tiver sorte, verá isto:

    Dice roll: 6 + 6 + 6 = 18
    You rolled doubles! +2 bonus to total!
    You rolled triples! +6 bonus to total!
    You win!
    
    

    Mas espere, você deve realmente recompensar o jogador com o bônus triplo e o bônus duplo? Afinal, um rolo de triplos implica que eles também rolaram duplos. Idealmente, os bônus não devem empilhar. Deve haver duas condições de bônus separadas. Este é um bug na lógica que precisará ser corrigido.

Problemas na sua lógica e oportunidades para melhorar o código

Embora este seja um bom começo, e você tenha aprendido muito sobre a if instrução, expressões booleanas, blocos de código, operadores lógicos OR e AND, e assim por diante, há muito que pode ser melhorado. Você fará isso na próxima unidade.

Recapitulação

  • Utilize uma instrução if para ramificar a lógica do código. A instrução de decisão if executará o código no seu bloco de código se a sua Expressão booleana for verdadeira. Caso contrário, o runtime ignorará o bloco de código e avançará para a linha de código seguintes após o bloco de código.
  • Uma expressão booleana é qualquer expressão que retorna um valor booleano.
  • Os operadores booleanos vão comparar os dois valores à esquerda e à direita em termos de igualdade, comparação e outros aspetos.
  • Um bloco de código é definido por chavetas { }. Recolhe linhas de código que devem ser tratadas como uma única unidade.
  • O operador lógico E && agrega duas expressões, pelo que ambas as subexpressões têm de ser verdadeiras para que toda a expressão seja verdadeira.
  • O operador lógico OU || agrega duas expressões pelo que, se uma das subexpressões for verdadeira, toda a expressão é verdadeira.

Verifique o seu conhecimento

1.

O que é um bloco de código?

2.

O que é uma declaração ou expressão booleana?