Instruções e loops em C# if – tutorial de lógica condicional

Este tutorial ensina a escrever código C# que examina variáveis e muda o caminho de execução com base nessas variáveis. Escreva o código em C# e veja os resultados da compilação e da execução. O tutorial contém uma série de lições que exploram construções de branches e loops em C#. Estas lições ensinam os princípios básicos da linguagem C#.

Pré-requisitos

Este tutorial espera que você tenha um computador configurado para desenvolvimento local. Consulte Configurar seu ambiente local para obter instruções de instalação e uma visão geral do desenvolvimento de aplicativos no .NET.

Se você preferir executar o código sem precisar configurar um ambiente local, consulte a versão interativa no navegador deste tutorial.

Tome decisões usando a instrução if

Crie um diretório chamado branches-tutorial. Torne esse o diretório atual e execute o seguinte comando:

dotnet new console -n BranchesAndLoops -o .

Importante

Os modelos C# para o .NET 6 usam instruções de nível superior. Se você já tiver atualizado para o .NET 6, talvez seu aplicativo não corresponda ao código descrito neste artigo. Para obter mais informações, consulte o artigo sobre Novos modelos C# geram instruções de nível superior

O SDK do .NET 6 também adiciona um conjunto de diretivas implícitasglobal using para projetos que usam os seguintes SDKs:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Essas diretivas implícitas global using incluem os namespaces mais comuns para o tipo de projeto.

Esse comando cria um novo aplicativo de console .NET no diretório atual. Abra Program.cs em seu editor favorito e substitua o conteúdo pelo seguinte código:

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

Experimente este código digitando dotnet run na sua janela do console. Você deverá ver a mensagem "A resposta é maior que 10" impressa no console. Modifique a declaração de b para que a soma seja inferior a 10:

int b = 3;

Digite dotnet run novamente. Como a resposta é inferior a 10, nada é impresso. A condição que você está testando é falsa. Não há qualquer código para execução, porque você escreveu apenas uma das ramificações possíveis para uma instrução if: a ramificação verdadeira.

Dica

À medida que explora C# (ou qualquer linguagem de programação), você cometerá erros ao escrever o código. O compilador encontrará e reportará esses erros. Verifique atentamente a saída do erro e o código que gerou o erro. O erro do compilador geralmente pode ajudá-lo a localizar o problema.

Este primeiro exemplo mostra o poder dos tipos if e Booliano. Um Booliano é uma variável que pode ter um dos dois valores: true ou false. C# define um tipo especial, bool para variáveis Boolianas. A instrução if verifica o valor de um bool. Quando o valor é true, a instrução após if é executada. Caso contrário, ela é ignorada. Esse processo de verificação de condições e execução de instruções com base nessas condições é eficiente.

Faça if e else funcionam juntas

Para executar um código diferente nos branches true e false, crie um branch else que será executado quando a condição for false. Experimente uma ramificação else. Adicione as duas últimas linhas do código abaixo (você já deve ter as quatro primeiras):

int a = 5;
int b = 3;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10");
else
    Console.WriteLine("The answer is not greater than 10");

A instrução após a palavra-chave else é executada somente quando a condição que estiver sendo testada for false. A combinação de if e else com condições Boolianas fornece todos os recursos que você precisa para lidar com uma condição true e false.

Importante

O recuo sob as instruções if e else é para leitores humanos. A linguagem C# não considera recuos ou espaços em branco como significativos. A instrução após a palavra-chave if ou else será executada com base na condição. Todos os exemplos neste tutorial seguem uma prática comum para recuar linhas com base no fluxo de controle de instruções.

Como o recuo não é significativo, você precisa usar { e } para indicar quando você quer que mais de uma instrução faça parte do bloco executado condicionalmente. Os programadores em C# normalmente usam essas chaves em todas as cláusulas if e else. O exemplo a seguir é igual ao que você acabou de criar. Modifique o código acima para coincidir com o código a seguir:

int a = 5;
int b = 3;
if (a + b > 10)
{
    Console.WriteLine("The answer is greater than 10");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
}

Dica

No restante deste tutorial, todos os exemplos de código incluem as chaves, seguindo as práticas aceitas.

Você pode testar condições mais complicadas. Adicione o código a seguir após o que você escreveu até o momento:

int c = 4;
if ((a + b + c > 10) && (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("And the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("Or the first number is not equal to the second");
}

O símbolo == testa a igualdade. Usar == distingue o teste de igualdade de atribuição, que você viu em a = 5.

O && representa "e". Isso significa que as duas condições devem ser verdadeiras para executar a instrução no branch verdadeiro. Estes exemplos também mostram que você pode ter várias instruções em cada branch condicional, desde que você coloque-as entre { e }. Você também pode usar || para representar "ou". Adicione o código a seguir após o que você escreveu até o momento:

if ((a + b + c > 10) || (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("Or the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("And the first number is not equal to the second");
}

Modifique os valores de a, b e c e alterne entre && e || para explorar. Você obterá mais compreensão de como os operadores && e || funcionam.

Você terminou a primeira etapa. Antes de iniciar a próxima seção, vamos passar o código atual para um método separado. Isso facilita o começo do trabalho com um exemplo novo. Coloque o código existente em um método chamado ExploreIf(). Chame-o pela parte superior do programa. Quando você terminar essas alterações, seu código deverá estar parecido com o seguinte:

ExploreIf();

void ExploreIf()
{
    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }

    int c = 4;
    if ((a + b + c > 10) && (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

Comente a chamada para ExploreIf(). Isso tornará a saída menos congestionada enquanto você trabalha nesta seção:

//ExploreIf();

O // inicia um comentário em C#. Os comentários são qualquer texto que você queira manter em seu código-fonte, mas não queria executar como código. O compilador não gera qualquer código executável a partir dos comentários.

Use loops para repetir operações

Nesta seção, você usa loops repetir as instruções. Adicione esse código após a chamada para ExploreIf:

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

A instrução while verifica uma condição e executa a instrução, ou bloco de instruções, após o while. Ele verifica repetidamente a condição, executando essas instruções até que a condição seja falsa.

Há outro operador novo neste exemplo. O ++ após a variável counter é o operador increment. Ele adiciona 1 ao valor de counter e armazena esse valor na variável counter.

Importante

Verifique se a condição de loop while muda para false ao executar o código. Caso contrário, crie um loop infinito, para que seu programa nunca termine. Isso não é demonstrado neste exemplo, porque você tem que forçar o programa a encerrar usando CTRL-C ou outros meios.

O loop while testa a condição antes de executar o código seguindo while. O loop do ... while executa o código primeiro e, em seguida, verifica a condição. O loop do while é mostrado no código a seguir:

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

Esse loop do e o loop while anterior produzem a mesma saída.

Trabalhar com o loop for

O loop for é usado normalmente em C#. Experimente esse código:

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

Ele faz o mesmo trabalho do loop while e do loop do que você já usou. A instrução for tem três partes que controlam o modo como ela funciona.

A primeira parte é o inicializador for: int index = 0; declara que index é a variável do loop, e define seu valor inicial como 0.

A parte central é a condição for: index < 10 declara que este loop for continuará sendo executado desde que o valor do contador seja inferior a 10.

A parte final é o iterador for: index++ especifica como modificar a variável de loop depois de executar o bloco após a instrução for. Aqui, ela especifica que index deve ser incrementado com 1 sempre que o bloco for executado.

Experimente você mesmo. Experimente cada uma das seguintes variações:

  • Altere o inicializador para iniciar em um valor diferente.
  • Altere a condição para parar em um valor diferente.

Quando terminar, vamos escrever um código para usar o que você aprendeu.

Há uma outra instrução de loop que não é abordada neste tutorial: a instrução foreach. A instrução foreach repete sua instrução para cada item em uma sequência de itens. Ela é usada com mais frequência com coleções, portanto, será abordada no próximo tutorial.

Loops aninhados criados

Um loop while, do ou for pode ser aninhado dentro de outro loop para criar uma matriz usando a combinação de cada item no loop externo com cada item no loop interno. Vamos fazer isso para criar um conjunto de pares alfanuméricos para representar linhas e colunas.

Um loop for pode gerar as linhas:

for (int row = 1; row < 11; row++)
{
    Console.WriteLine($"The row is {row}");
}

Outro loop pode gerar as colunas:

for (char column = 'a'; column < 'k'; column++)
{
    Console.WriteLine($"The column is {column}");
}

Você pode aninhar um loop dentro do outro para formar pares:

for (int row = 1; row < 11; row++)
{
    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The cell is ({row}, {column})");
    }
}

Você pode ver que o loop externo incrementa uma vez para cada execução completa do loop interno. Inverta o aninhamento de linha e da coluna e confira as alterações. Quando terminar, coloque o código desta seção em um método chamado ExploreLoops().

Combinar branches e loops

Agora que você viu a instrução if e as construções de loop na linguagem C#, verifique se você pode escrever o código C# para encontrar a soma de todos os inteiros de 1 a 20 divisíveis por 3. Veja algumas dicas:

  • O operador % retorna o restante de uma operação de divisão.
  • A instrução if retorna a condição para ver se um número deve ser parte da soma.
  • O loop for pode ajudar você a repetir uma série de etapas para todos os números de 1 a 20.

Tente você mesmo. Depois verifique como você fez. Você deve obter 63 como resposta. Veja uma resposta possível exibindo o código completo no GitHub.

Você concluiu o tutorial "branches e loops".

Continue com o tutorial Matrizes e coleções em seu próprio ambiente de desenvolvimento.

Saiba mais sobre esses conceitos nesses artigos: