C#

Estruturas condicionais e de repetição no C#

Veremos nesse artigo sobre quais são e como podemos utilizar as estruturas condicionais e as estruturas de repetição no C#

cerca de 1 mês atrás

No artigo anterior vimos sobre variáveis e constantes no C#, agora nós vamos aprender quais são e como utilizar as estruturas condicionais e de repetição disponíveis na linguagem C#.

As estruturas condicionais estão diretamente ligadas ao processo de tomada de decisão dentro de um algoritmo, são elas que nos permitem alterar o fluxo de execução do código dependendo dos valores com os quais estamos trabalhando.

Já as estruturas de repetição assim como o nome já diz nos permitem repetir certos trechos de códigos um número determinado ou indeterminado de vezes, dependendo sempre de qual a condição de parada para tal estrutura.

Tanto as estruturas de repetição quanto as estruturas de condição irão trabalhar na sua maioria das vezes com valores booleanos, ou seja, true (verdadeiro) e false (falso). Caso você ainda não esteja familiarizado com os conceitos de estruturas condicionais e de repetição na lógica de programação recomendo a leitura do artigo Estruturas condicionais e de repetição, que temos aqui no blog da TreinaWeb.

C# - Fundamentos
Curso C# - Fundamentos
Conhecer o curso

Estruturas condicionais

As estruturas condicionais possibilitam ao programa tomar decisões e alterar o seu fluxo de execução. Isso possibilita ao desenvolvedor o poder de controlar quais são as tarefas e trechos de código executados de acordo com diferentes situações, como os valores de variáveis.

As estruturas condicionais geralmente analisam expressões booleanas e, caso estas expressões sejam verdadeiras, um trecho do código é executado. No caso contrário, outro trecho do código é executado.

Estrutura if/else

O if/else é uma estrutura de condição em que uma expressão booleana é analisada. Quando a condição que estiver dentro do if for verdadeira, ela é executada. Já o else é utilizado para definir o que é executado quando a condição analisada pelo if for falsa. Caso o if seja verdadeiro e, consequentemente executado, o else não é executado.

O if pode ser utilizado em conjunto com o else ou até mesmo sozinho, caso necessário.

Abaixo, temos um exemplo onde o if é utilizado em conjunto com o else.

int idade = 18;
if (idade >= 18)
{
    // Se a váriavel idade for maior ou igual à 18 esse trecho de código será executado
    Console.WriteLine("Você é maior de idade!");
}
else
{
    // Se a váriavel idade não for maior ou igual à 18 esse trecho de código será executado
    Console.WriteLine("Você é menor de idade!");
}

Também podemos utilizar somente o if, não definindo um fluxo alternativo.

int idade = 18;
if (idade >= 18)
{
    // Se a váriavel idade for maior ou igual à 18 esse trecho de código será executado
    Console.WriteLine("Você é maior de idade!");
}
// Se a váriavel idade não for maior ou igual à 18, nenhuma frase será exibida

Ainda é possível encadear múltiplas estruturas if/else caso necessário.

int idade = 18;
if (idade >= 18)
{
    // Se a váriavel idade for maior ou igual à 18 esse trecho de código será executado
    Console.WriteLine("Você é maior de idade!");
}
else if (idade >= 16)
{
    // Se a váriavel idade não for maior ou igual à 18 mas for maior ou igual a 16 esse trecho de código será executado
    Console.WriteLine("Você não é maior de idade, mas já pode votar!");
}
else
{
    // Se a váriavel idade não for maior ou igual à 18 esse trecho de código será executado
    Console.WriteLine("Você é menor de idade!");
}

C# - Orientação a Objetos
Curso C# - Orientação a Objetos
Conhecer o curso

Estrutura switch/case

A estrutura condicional switch/case vem como alternativa em momentos em que temos que utilizar múltiplos if's no código. Múltiplos if/else encadeados tendem a tornar o código muito extenso, pouco legível e com baixo índice de manutenção.

O switch/case testa o valor contido em uma variável, realizando uma comparação com cada uma das opções. Cada uma dessas possíveis opções é delimitada pela instrução case.

Podemos ter quantos casos de análise forem necessários e, quando um dos valores corresponder ao da variável, o código do case correspondente será executado. Caso a variável não corresponda a nenhum dos casos testados, o último bloco será executado, chamado de default (padrão).

A análise de cada caso também precisa ter seu final delimitado. Essa delimitação é feita através da palavra reservada break.

int mes = 2;
switch (mes)
{
    case 1:
        Console.WriteLine("O mês é Janeiro!");
        break;
    case 2:
        Console.WriteLine("O mês é Fevereiro");
        break;
    case 3:
        Console.WriteLine("O mês é Março");
        break;
    case 4:
        Console.WriteLine("O mês é Abril");
        break;
    case 5:
        Console.WriteLine("O mês é Maio");
        break;
    case 6:
        Console.WriteLine("O mês é Junho");
        break;
    case 7:
        Console.WriteLine("O mês é Julho");
        break;
    case 8:
        Console.WriteLine("O mês é Agosto");
        break;
    case 9:
        Console.WriteLine("O mês é Setembro");
        break;
    case 10:
        Console.WriteLine("O mês é Outubro");
        break;
    case 11:
        Console.WriteLine("O mês é Novembro");
        break;
    case 12:
        Console.WriteLine("O mês é Dezembro");
        break;
    default:
        Console.WriteLine("Mês inválido");
        break;
}

Na maioria das linguagem que possui a estrutura switch/case não é necessário colocar o break na cláusula default, porém no C# é obrigatório, caso não faça isso será exibido um erro de compilação no momento em que realizar a execução do código.

No C# também existem outras maneiras de se utilizar a estrutura switch/case, como por exemplo as switch expressions, nesse artigo eu não irei abordar sobre esse recurso e irei me ater apenas ao switch clássico, mas aqui no blog nós temos o artigo Switch Expressions no C# 8.0 que aborda sobre esse recurso em mais detalhes e que recomendo a leitura caso tenha curiosidade de aprender sobre essa maneira diferente de se utilizar a estrutura switch/case.

Estruturas de repetição

Estruturas de repetição, também conhecidas como loops (laços), são utilizadas para executar repetidamente uma instrução ou bloco de instrução enquanto determinada condição estiver sendo satisfeita.

As principais estruturas de repetição na maioria das linguagens são o for e o while, no C# além dessas duas também temos o do/while e o foreach.

Estrutura while

O while é uma estrutura de repetição que irá repetir o bloco de código enquanto uma determinada condição for verdadeira, geralmente o while é utilizando quando não sabemos quantas vezes o trecho de código em questão deve ser repetido.

A estrutura de repetição while possui a seguinte estrutura:

while (<condição>)
{
    // Trecho de código a ser repetido
}

Perceba que a condição para interrupção da repetição do trecho dentro do while se dá através de uma condição booleana.

Abaixo, temos um exemplo do while. Neste exemplo, é pedido ao usuário que tente adivinhar o número. Enquanto o usuário não acerta o número, é pedido para que o usuário digite o valor que ele acha que é o correto. Perceba que nós temos um trecho de código que é sempre repetido, que é o pedido do número para o usuário. Mas, não sabemos exatamente quando o usuário vai acertar este número, ou seja, não sabemos exatamente quantas vezes o trecho de código será repetido. Nessa situação, o while é a estrutura de repetição mais adequada.

int numero = -1;
while (numero != 10)
{
    Console.Write("Digite um número: ");
    numero = Convert.ToInt32(Console.ReadLine());
    if (numero < 10)
    {
        Console.WriteLine("Você errou, tente um número maior.");
    }
    else if (numero > 10)
    {
        Console.WriteLine("Você errou, tente um número menor.");
    }
    else
    {
        Console.WriteLine("Parabéns, você acertou!");
    }
}

C# - Algoritmos
Curso C# - Algoritmos
Conhecer o curso

Estrutura do/while

A estrutura do/while é bem semelhante a estrutura while, a diferença é que na estrutura do/while a condição é testada apenas ao final do loop, ou seja, o código será executado ao menos uma vez, mesmo que a condição seja falsa desde o início.

Veja um simples exemplo de uso do do/while

int contador = 15;
do
{
    Console.WriteLine("O contador vale: " + contador);
    contador++;
} while (contador <= 10);

No caso acima temos um algoritmo que irá imprimir o valor contido na variável contador enquanto o valor da mesma for menor ou igual à 10, porém a variável contador foi inicializada com o valor de 15, ou seja, a condição de execução do bloco do/while é falsa desde o início, porém, mesmo assim o bloco de código seja executado uma vez.

Estrutura for

O for é uma estrutura de repetição que trabalha com uma variável de controle e que repete o seu bloco de código até que um determinada condição que envolve essa variável de controle seja falsa, geralmente utilizamos a estrutura for quando sabemos a quantidade de vezes que o laço precisará ser executado.

O for possui a seguinte estrutura:

for (<variável de controle>, <condição de parada>, <incremento/decremento da váriavel de controle>)
{
    // Trecho de código a ser repetido
}

Quando utilizamos o for, precisamos de uma variável para auxiliar a controlar a quantidade de repetições a serem executadas. Essa variável é chamada de variável de controle e é declarada no primeiro argumento do for.

O segundo argumento do for é utilizado para definir até quando o for será executado. Geralmente, trata-se de uma condição booleana em cima da variável de controle.

O terceiro argumento indica o quanto a variável de controle será modificada no final de cada execução dentro do for.

Veja o exemplo abaixo:

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine("A variável i agora vale " + i);
}

A execução desse código causaria a seguinte saída:

A variável i agora vale 1
A variável i agora vale 2
A variável i agora vale 3
A variável i agora vale 4
A variável i agora vale 5
A variável i agora vale 6
A variável i agora vale 7
A variável i agora vale 8
A variável i agora vale 9
A variável i agora vale 10

Isso acontece porque:

  • A variável de controle, que chamamos de i, tem seu valor inicial como 1;
  • No segundo argumento, onde escrevemos i <= 10, estamos dizendo que o bloco de código do for será executado enquanto o valor de i for menor ou igual a 10;
  • O terceiro argumento foi definido como i++, estamos dizendo que, no fim de cada execução do for, o valor de i será incrementado em 1 unidade. Isso quer dizer que, no fim da primeira execução, i irá de 1 para 2, na segunda execução, irá de 2 para 3, e assim por diante;
  • Com isso, o bloco de código do for será executado por 10 vezes, já que o i é iniciado em 1. A saída do código acima mostra que a mensagem foi escrita por 10 vezes, onde o i variou de 1 até 10.

Um ponto importante sobre o for é que, por causa da utilização da variável de controle, geralmente ele é utilizado quando sabemos exatamente quantas vezes queremos repetir a execução do trecho de código.

Estrutura foreach

Além da estrutura for no C# também temos a estrutura foreach, basicamente a estrutura foreach serve para que possamos percorrer os elementos de uma estrutura de dados de forma mais simples e menos verbosa.

O foreach foi adicionado pois na maioria das vezes que precisamos percorrer os elementos de uma coleção não nos interessa o índice daquela coleção e sim o seu valor e antes da existência do foreach era necessário utilizar o for e percorrer os elementos de uma coleção utilizando os índices da mesma.

Veja como percorríamos um array antes da existência da estrutura foreach:

string[] alunos = new string[4] { "Cleyson", "Anna", "Autobele", "Hayssa" };
for (int i = 0; i < 4; i++)
{
    Console.WriteLine(alunos[i]);
}

No código acima foi criado um array de strings com quatro posições e em cada uma dessas possui tem o nome de uma aluno, logo em seguida temos um for que irá fazer com que a variável controladora i vá de 0 á 3 e então utilizamos a variável i para fazer acesso aos elementos do array pelo índice e assim conseguir imprimir todos os seus valores.

O problema do uso do for para essa tarefa é que não nos interessa o índice do array propriamente dito e sim apenas os seus valores internos, então podemos utilizar a estrutura foreach para que tenhamos um código mais limpo.

Veja como ficaria o código acima refatorado para que usemos o foreach:

string[] alunos = new string[4] { "Cleyson", "Anna", "Autobele", "Hayssa" };
foreach (var aluno in alunos)
{
    Console.WriteLine(aluno);
}

Basicamente o que o foreach vai fazer é iterar sobre os elementos do array e para cada loop a variável aluno irá conter um diferente valor do array, dessa maneira o acesso aos elementos do array é muito mais simples e direto.

Em ambos os casos o resultado impresso no terminal será:

Cleyson
Anna
Autobele
Hayssa

C# - LINQ
Curso C# - LINQ
Conhecer o curso

Conclusão

Como vimos nesse artigo o C# possui todas as estruturas de condição e de repetição básicas que existem nas maioria das linguagens de programação, vimos quais são essas estruturas e como podemos utilizá-las em nossos programas.

Por fim, caso queira aprender mais sobre o C# e sua infinidade de recursos saiba que aqui na TreinaWeb temos o curso C# - Fundamentos que possui 04h05 de vídeo e um total de 29 exercícios. Conheça também nossos outros cursos de C#.

Veja quais são os tópicos abordados durante o curso de C# - Fundamentos:

  • Preparar o ambiente de desenvolvimento;
  • Criar novos projetos e compreender sua estrutura;
  • Declarar e utilizar variáveis e operadores;
  • Utilizar estruturas condicionais e de repetição;
  • Utilizar classes, métodos e namespaces;
  • Tratar exceções e depurar seu código.

Autor(a) do artigo

Cleyson Lima
Cleyson Lima

Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.

Todos os artigos

Artigos relacionados Ver todos