Aprenda lógica condicional com instruções branch e loop
Este tutorial ensina como escrever código que examina variáveis e altera o caminho de execução com base nessas variáveis. Vai utilizar o browser para escrever C# interativamente e ver os resultados da compilação e execução do seu código. Este tutorial contém uma série de lições que exploram construções de ramificação e looping em C#. Estas lições ensinam-lhe as noções básicas da linguagem C#.
Gorjeta
Para colar um trecho de código dentro do modo de foco, você deve usar o atalho de teclado (Ctrl + v ou cmd + v).
Utilizar a instrução if para tomar decisões
Execute o código seguinte na janela interativa. Selecione o botão Inserir modo de foco. Em seguida, digite o seguinte bloco de código na janela interativa e selecione Executar:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");
Se você estiver executando isso em seu ambiente, você deve seguir as instruções para a versão local.
Altere a declaração de b
para que a soma seja inferior a 10:
int b = 3;
Selecione o botão Executar novamente. Uma vez que a resposta é inferior a 10, nada vai ser impresso. A condição que está a testar é “false”. Não tem nenhum código para executar porque só escreveu um dos ramos possíveis para as instruções if
, o ramo “true”.
Gorjeta
À medida que explora o C# (ou qualquer linguagem de programação), irá cometer erros quando escreve código. O compilador irá encontrar esses erros e comunicá-los a si. Quando a saída incluir mensagens de erro, verifique atentamente o código de exemplo e o código na janela interativa para ver o que tem de corrigir. Esse exercício irá ajudá-lo a aprender a estrutura do código C#.
O primeiro exemplo mostra o poder dos tipos if
e booleanos. Os booleanos são variáveis que podem ter um de dois valores, true
ou false
. O C# define um tipo especial, bool
, para as variáveis booleanas. A instrução if
verifica o valor de um bool
. Se o valor for true
, é executada a instrução que se segue a if
. Caso contrário, é ignorado.
Este processo de verificação de condições e execução de declarações com base nessas condições é poderoso. Vamos explorar mais.
Operações conjuntas com if e else
Para executar código diferente nos ramos “true” e “false”, crie um ramo else
que é executado se a condição for “false”. Experimente o seguinte:
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 a seguir à palavra-chave else
só é executada quando a condição que está a ser testada é false
. Combinar if
e else
com condições booleanas proporciona todo o poder de que precisa.
Importante
O avanço nas instruções if
e else
destina-se a leitores humanos.
A linguagem C# não trata o recuo ou o espaço em branco como significativos.
A instrução a seguir à 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 }
indicar quando deseja que mais de uma instrução faça parte do bloco que é executado condicionalmente. Normalmente, os programadores de C# utilizam essas chavetas em todas as cláusulasif
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");
}
Gorjeta
No restante deste tutorial, todos os exemplos de código incluem as chaves, seguindo as práticas aceitas.
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. O uso ==
distingue o teste de igualdade da atribuição, que você viu em a = 5
.
&&
representa "e". Significa que ambas as condições têm de ser verdadeiras para executar a instrução no ramo “true”. Estes exemplos também mostram que pode ter várias instruções em cada ramo condicional, desde que as ponha entre {
e }
.
Você também pode usar ||
para representar "ou":
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("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 alterne c
entre &&
e ||
para explorar. Você obterá mais compreensão de como os &&
operadores e ||
trabalham.
Utilizar ciclos para repetir operações
Outro conceito importante para criar programas maiores são os ciclos. Para repetir instruções que pretende que sejam executadas mais de uma vez, vai utilizar ciclos. 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 que aparece a seguir a while
. Vai repetir a verificação da condição e executar as instruções até a condição ser “false”.
Há um operador novo neste exemplo. O ++
a seguir à variável counter
é o operador increment. Adiciona 1 ao valor do contador e armazena esse valor na variável do contador.
Importante
Confirme que a condição de ciclo while
muda para “false” quando executa o código. Caso contrário é criado um ciclo infinito, no qual o programa nunca termina. Não vamos demonstrar essa situação, pois o motor que executa o seu código excederá o limite de tempo e não o seu programa não gerará nenhuma saída.
O ciclo while
testa a condição antes de executar o código que está a seguir a while
. O ciclo do
... while
executa primeiro o código e, depois, verifica a condição. Esta secção tem o seguinte aspeto:
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
Este ciclo do
e o ciclo while
anterior funcionam da mesma forma.
Vamos avançar para uma última instrução de ciclo.
Trabalhar com o ciclo “for”
Outra instrução de ciclo comum que vai ver em C# é o ciclo for
. Experimente este código na janela interativa:
for (int counter = 0; counter < 10; counter++)
{
Console.WriteLine($"Hello World! The counter is {counter}");
}
Funciona da mesma forma que os ciclos while
e do
que já utilizou. O funcionamento da instrução for
é controlado por três partes.
A primeira parte é o inicializador for: int counter = 0;
declara que counter
é a variável do ciclo e define o valor iniciado do mesmo como 0
.
A parte do meio é a condição for: counter < 10
declara que este ciclo for
continua a ser executado desde que o valor do contador seja inferior a 10.
A última parte é o iterador de for: counter++
especifica como modificar a variável do ciclo depois de executar o bloco que se segue à instrução for
. Aqui, especifica que counter
deve ser incrementado em 1 sempre que o bloco é executado.
Experimente. Tente o seguinte:
- Altere o inicializador para que comece com outro valor.
- Altere a condição para que pare noutro valor.
Quando terminar, vai avançar e escrever código sozinho para utilizar o que aprendeu.
Há uma outra instrução de looping que não é abordada neste tutorial: a foreach
instrução. A foreach
instrução repete sua instrução para cada item em uma sequência de itens. É mais frequentemente usado com coleções, por isso é abordado no próximo tutorial.
Loops aninhados criados
Um while
, do
, ou for
loop 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 construir um conjunto de pares alfanuméricos para representar linhas e colunas.
Um for
loop 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 aumenta uma vez para cada execução completa do loop interno. Inverta o aninhamento de linhas e colunas e veja as alterações por si mesmo.
Combinar ramos e ciclos
Agora que já viu a instrução if
e as construções de ciclos na linguagem C#, veja se consegue escrever código em C# para determinar a soma de todos os números inteiros de 1 a 20 que são divisíveis por 3. Tenha em conta estas sugestões:
- O operador
%
dá-lhe o restante de uma operação de divisão. - A instrução
if
dá-lhe a condição para ver se um número deverá ser parte da soma. - O ciclo
for
pode ajudá-lo a repetir uma série de passos para todos os números de 1 a 20.
Experimente. Depois, veja como se saiu. Como sugestão, a resposta deverá ser 63.
Desafio concluído
Deparou-se com algo semelhante a isto?
int sum = 0;
for (int number = 1; number < 21; number++)
{
if (number % 3 == 0)
{
sum = sum + number;
}
}
Console.WriteLine($"The sum is {sum}");
Parabéns!
Você concluiu o tutorial interativo "ramificações e loops". Você pode selecionar o link de coleção de listas abaixo para iniciar o próximo tutorial interativo ou pode visitar o site do .NET para baixar o SDK do .NET, criar um projeto em sua máquina e continuar codificando. A secção "Próximos passos" traz-o de volta a estes tutoriais.
Você pode aprender mais sobre esses conceitos nestes artigos:
Está com problemas nesta secção? Se sim, envie-nos o seu feedback para que possamos melhorar esta secção.