Compartilhar via


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

Este tutorial ensina como escrever código C# que examina variáveis e altera o caminho de execução com base nessas variáveis. Você escreve código C# e vê os resultados da compilação e execução dele. O tutorial contém uma série de lições que exploram as construções de ramificação e looping em C#. Essas lições ensinam os conceitos básicos da linguagem C#.

Dica

Quando um bloco de snippet de código inclui o botão "Executar", esse botão abre a janela interativa ou substitui o código existente na janela interativa. Quando o snippet não inclui um botão "Executar", você pode copiar o código e adicioná-lo à janela interativa atual.

Execute o código a seguir na janela interativa. Selecione Executar:

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

Modifique a declaração de b para que a soma seja menor que 10:

int b = 3;

Selecione o botão Executar novamente. Como a resposta é menor que 10, nada é impresso. A condição que você está testando é falsa. Você não tem nenhum código para executar, pois escreveu apenas uma das ramificações possíveis de uma instrução if: a ramificação verdadeira.

Dica

Ao explorar C# (ou qualquer linguagem de programação), você comete erros ao escrever código. O compilador localiza esses erros e os reporta a você. Quando a saída contiver mensagens de erro, examine atentamente o código de exemplo e o código na janela interativa para ver o que corrigir. Esse exercício ajuda você a aprender a estrutura do código C#.

Este primeiro exemplo mostra o poder dos tipos if e boolianos. Um booliano é uma variável que pode ter um dos dois valores: true ou false. O 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 o 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. Vamos explorar mais.

Fazer com que "if" e "else" trabalhem juntos

Para executar código diferente nas ramificações verdadeiras e falsas, crie uma ramificação else que seja executada quando a condição for falsa. Experimente o seguinte código:

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 está sendo testada é false. Combinar if e else com condições boolianas fornece toda a energia necessária.

Importante

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

Já que a indentação não é significativa, é necessário usar { e } para indicar quando você deseja que mais de uma instrução faça parte do bloco que é executado condicionalmente. Os programadores em C# normalmente usam essas chaves em todas as cláusulas if e else. O exemplo a seguir é o mesmo que você criou. Experimente.

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:

int a = 5;
int b = 3;
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":

if ((a + b + c > 10) || (a == b))

Modifique os valores de a, be c e alterne entre && e || para explorar. Você obtém mais compreensão de como os operadores && e || funcionam.

Use loops para repetir operações

Outro conceito importante para criar programas maiores são os loops. Você usa loops para repetir instruções que deseja executar mais de uma vez. Experimente este código na janela interativa:

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 após a while. Ela repete a verificação da condição e a execução dessas instruções até que a condição seja false.

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

Importante

Verifique se a condição de loop while muda para false à medida que você executa o código. Caso contrário, você criará um loop infinito em que seu programa nunca terminará. Não vamos demonstrar isso, pois o mecanismo que executa seu código atinge o tempo limite e você não vê nenhuma saída do programa.

O loop while testa a condição antes de executar o código após o while. O loop do... while executa o código primeiro e, em seguida, verifica a condição. Tem esta aparência:

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

Esse loop do e o loop de while anterior funcionam da mesma forma.

Vamos passar para a última instrução de loop.

Trabalhar com o loop for

Outra instrução de loop comum que você vê no código C# é o loop for. Experimente este código na janela interativa:

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

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

  • A primeira parte é a do inicializador: int counter = 0; declara que counter é a variável de loop e define seu valor inicial como 0.
  • A parte intermediária é a de condição: counter < 10 declara que esse loop for continua a ser executado desde que o valor do contador seja menor que 10.
  • A parte final é a do iterador: counter++ especifica como modificar a variável de loop depois de executar o bloco após a instrução for. Aqui, ela especifica que counter é incrementado com 1 sempre que o bloco for executado.

Experimente essas condições por conta própria. Experimente cada uma das seguintes alterações:

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

Quando terminar, vamos continuar a escrever algum código por conta própria para usar o que você aprendeu.

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

Loops aninhados criados

Um loop while, doou 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 perceber que o loop externo é incrementado uma vez após cada execução completa do loop interno. Inverta o aninhamento de linha e da coluna e confira as alterações.

Combinar branches e loops

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

  • O operador % retorna o restante de uma operação de divisão.
  • A instrução if especifica a condição para determinar se um número deve fazer parte da soma.
  • O loop for pode ajudá-lo a repetir uma série de etapas para todos os números de 1 a 20.

Experimente você mesmo. Em seguida, verifique como você fez. Como dica, você deve obter 63 como resposta.

Você pensou em algo assim?

int sum = 0;
for (int number = 1; number < 21; number++)
{
    if (number % 3 == 0)
    {
        sum = sum + number;
    }
}
Console.WriteLine($"The sum is {sum}");

Você concluiu o tutorial interativo "branches e loops". Você pode selecionar o link coleções de listas para iniciar o próximo tutorial interativo ou visitar o site do .NET para baixar o SDK do .NET, criar um projeto no computador e continuar programando. A seção "Próximas etapas" traz você de volta a esses tutoriais.

Você pode saber mais sobre esses conceitos nestes artigos: