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.
Curso C# - Fundamentos
Conhecer o cursoEstruturas 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!");
}
Curso C# - Orientação a Objetos
Conhecer o cursoEstrutura 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!");
}
}
Curso C# - Algoritmos
Conhecer o cursoEstrutura 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 como1
; - No segundo argumento, onde escrevemos
i <= 10
, estamos dizendo que o bloco de código dofor
será executado enquanto o valor dei
for menor ou igual a10
; - O terceiro argumento foi definido como
i++
, estamos dizendo que, no fim de cada execução dofor
, o valor dei
será incrementado em1
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 oi
é iniciado em1
. A saída do código acima mostra que a mensagem foi escrita por 10 vezes, onde oi
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
Curso C# - LINQ
Conhecer o cursoConclusã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.