Instruções e ciclos C# if
– tutorial de lógica condicional
Este tutorial ensina-o a escrever código C# que examina variáveis e altera o caminho de execução com base nessas variáveis. Escreve código C# e vê os resultados da compilação e execução do mesmo. O tutorial contém uma série de lições que exploram construções de ramificação e ciclo em C#. Estas lições ensinam-lhe as noções básicas da linguagem C#.
Dica
Para colar um fragmento de código no modo de detalhe , deve utilizar o atalho de teclado (Ctrl + v ou cmd + v).
Pré-requisitos
O tutorial espera que tenha uma máquina configurada para desenvolvimento local. Veja Configurar o ambiente local para obter instruções de instalação e uma descrição geral do desenvolvimento de aplicações no .NET.
Se preferir executar o código sem ter de configurar um ambiente local, veja a versão interativa no browser deste tutorial.
Tomar decisões com a if
instrução
Crie um diretório com o nome branches-tutorial. Torne-o no diretório atual e execute o seguinte comando:
dotnet new console -n BranchesAndLoops -o .
Importante
Os modelos C# para .NET 6 utilizam instruções de nível superior. A aplicação poderá não corresponder ao código neste artigo, se já tiver atualizado para o .NET 6. Para obter mais informações, veja o artigo sobre Novos modelos C# para gerar instruções de nível superior
O SDK .NET 6 também adiciona um conjunto de diretivas implícitasglobal using
para projetos que utilizam os seguintes SDKs:
- Microsoft.NET.Sdk
- Microsoft.NET.Sdk.Web
- Microsoft.NET.Sdk.Worker
Estas diretivas implícitas global using
incluem os espaços de nomes mais comuns para o tipo de projeto.
Para obter mais informações, veja o artigo sobre Diretivas de utilização implícita
Este comando cria uma nova aplicação de consola .NET no diretório atual. Abra Program.cs no seu editor favorito e substitua os conteúdos 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 ao escrever dotnet run
na janela da consola. Deverá ver a mensagem "A resposta é superior a 10" impressa na consola. Altere a declaração de b
para que a soma seja inferior a 10:
int b = 3;
Escreva dotnet run
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”.
Dica
À medida que explora o C# (ou qualquer linguagem de programação), irá cometer erros quando escreve código. O compilador irá localizar e comunicar os erros. Observe atentamente o resultado do erro e o código que gerou o erro. Normalmente, o erro do compilador pode ajudá-lo a encontrar o problema.
Este primeiro exemplo mostra a potência dos if
tipos e Booleanos. Um Booleano é uma variável que pode ter um de dois valores: true
ou false
. C# define um tipo especial, bool
para 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 instruções com base nessas condições é poderoso.
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 um else
ramo. Adicione as duas últimas linhas no código abaixo (já deverá 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 a seguir à palavra-chave else
só é executada quando a condição que está a ser testada é false
. Combinar if
e com condições booleanas fornece toda a energia necessária para processar uma condição e uma true
false
.else
Importante
O avanço nas instruções if
e else
destina-se a leitores humanos. A linguagem C# não trata o avanço ou o espaço em branco como significativo. 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 avançar linhas com base no fluxo de controlo das instruções.
Uma vez que o avanço não é significativo, tem de utilizar {
e }
indicar quando pretende que mais do que 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 seguinte é o mesmo que criou. Modifique o código acima para corresponder ao 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");
}
Dica
Durante o resto deste tutorial, os exemplos de código incluem todas as chavetas, seguindo as práticas aceites.
Pode testar condições mais complicadas. Adicione o seguinte código depois do código que escreveu até agora:
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. Utilizar ==
distingue o teste para a igualdade da atribuição, que 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 }
. Também pode utilizar ||
para representar "ou". Adicione o seguinte código depois do que escreveu até agora:
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 e c
alterne entre &&
e ||
para explorar. Irá compreender melhor como funcionam os &&
operadores e ||
.
Terminou o primeiro passo. Antes de começar a secção seguinte, vamos mover o código atual para um método separado. Isto torna mais fácil começar a trabalhar com um novo exemplo. Coloque o código existente num método chamado ExploreIf()
. Chame-o a partir da parte superior do seu programa. Quando tiver terminado essas alterações, o código deverá ter o seguinte aspeto:
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()
. Irá tornar o resultado menos desordenado à medida que trabalha nesta secção:
//ExploreIf();
O //
inicia um comentário em C#. Os comentários são qualquer texto que pretenda manter no código fonte, mas não são executados como código. O compilador não gera nenhum código executável a partir de comentários.
Utilizar ciclos para repetir operações
Nesta secção, vai utilizar ciclos para repetir instruções. Adicione este código após a chamada para ExploreIf
:
int counter = 0;
while (counter < 10)
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
}
A while
instrução verifica uma condição e executa o bloco de instrução ou instrução a seguir a while
. Verifica repetidamente a condição, executando essas instruções até que a condição seja falsa.
Há um operador novo neste exemplo. O ++
a seguir à variável counter
é o operador increment. Adiciona 1 ao valor de counter
e armazena esse valor na counter
variável .
Importante
Certifique-se de que a condição de while
ciclo muda para falso à medida que executa o código. Caso contrário é criado um ciclo infinito, no qual o programa nunca termina. Isso não é demonstrado neste exemplo, porque tem de forçar o programa a deixar de utilizar CTRL-C ou outros meios.
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. O ciclo do do while é apresentado no seguinte código:
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
Este do
ciclo e o ciclo anterior while
produzem o mesmo resultado.
Trabalhar com o ciclo “for”
O ciclo for é normalmente utilizado em C#. Experimente este código:
for (int index = 0; index < 10; index++)
{
Console.WriteLine($"Hello World! The index is {index}");
}
O código anterior funciona da mesma forma que o while
ciclo e o do
ciclo que já utilizou. O funcionamento da instrução for
é controlado por três partes.
A primeira parte é o para inicializador: int index = 0;
declara que index
é a variável de ciclo e define o valor inicial como 0
.
A parte central é a condição for: index < 10
declara que este for
ciclo continua a ser 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 ciclo depois de executar o bloco seguindo a for
instrução . Aqui, especifica que index
deve ser incrementado em 1 sempre que o bloco é executado.
Experimente a si mesmo. Experimente cada uma das seguintes variações:
- 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.
Existe outra instrução looping que não é abordada neste tutorial: a foreach
instrução . A foreach
instrução repete a instrução para cada item numa sequência de itens. É mais frequentemente utilizado com coleções, pelo que é abordado no próximo tutorial.
Ciclos aninhados criados
Um while
ciclo , do
ou for
pode ser aninhado dentro de outro ciclo para criar uma matriz com a combinação de cada item no ciclo externo com cada item no ciclo interno. Vamos fazê-lo para criar um conjunto de pares alfanuméricos para representar linhas e colunas.
Um for
ciclo pode gerar as linhas:
for (int row = 1; row < 11; row++)
{
Console.WriteLine($"The row is {row}");
}
Outro ciclo pode gerar as colunas:
for (char column = 'a'; column < 'k'; column++)
{
Console.WriteLine($"The column is {column}");
}
Pode aninhar um ciclo 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})");
}
}
Pode ver que o ciclo externo incrementa uma vez para cada execução completa do ciclo interno. Inverta o aninhamento de linhas e colunas e veja as alterações por si próprio. Quando terminar, coloque o código desta secção num método chamado ExploreLoops()
.
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. Deve receber 63 por uma resposta. Pode ver uma resposta possível ao ver o código concluído no GitHub.
Concluiu o tutorial "ramos e ciclos".
Pode continuar com o tutorial Matrizes e coleções no seu próprio ambiente de desenvolvimento.
Pode saber mais sobre estes conceitos nestes artigos: