Exercício – Criar e configurar loops de iteração
- 14 minutos
Na superfície, a instrução for é outra instrução de iteração que permite percorrer um bloco de código e, consequentemente, alterar o fluxo de execução do código. No entanto, depois de examinarmos como cada um funciona, podemos identificar melhor as nuances de cada instrução de iteração e quando usá-las.
O que é a declaração for?
A instrução for itera por um bloco de código um número específico de vezes. Esse nível de controle torna a for instrução exclusiva entre as outras instruções de iteração. A instrução foreachitera por um bloco de código uma vez para cada item em uma sequência de dados, como uma matriz ou coleção. A while instrução itera por meio de um bloco de código até que uma condição seja atendida.
Além disso, a instrução for oferece muito mais controle sobre o processo de iteração, expondo as condições para a iteração.
Neste exercício, você usará a instrução for, aprendendo como controlar a pré-condição da iteração, a condição de conclusão, o padrão de iteração e muito mais. Além disso, você irá aprender sobre casos de uso comuns para a declaração for.
Ok, agora vamos preparar nosso ambiente de codificação e começar nosso exame de exemplos de código que implementam uma for instrução.
Preparar o ambiente de codificação
Este módulo inclui atividades práticas que orientam você durante o processo de criação e execução do código de demonstração. Recomendamos que você conclua essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code nessas atividades ajudará você a se sentir mais confortável escrevendo e executando o código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abra o Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente em outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta , navegue até a pasta Área de Trabalho do Windows.
Caso você tenha um local de pasta diferente onde mantém os projetos de código, você pode usar esse local de pasta. Neste treinamento, o importante é ter um local fácil de localizar e lembrar.
Na caixa de diálogo Abrir Pasta, selecione Selecionar pasta.
Se aparecer uma caixa de diálogo de segurança perguntando se confia nos autores, selecione Sim.
No menu Terminal do Visual Studio Code, selecione Novo Terminal.
Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Observação
Se você estiver trabalhando no próprio computador em vez de em uma área restrita ou em um ambiente hospedado e tiver concluído outros módulos do Microsoft Learn desta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você poderá ignorar a próxima etapa, que será usada para criar o aplicativo de console na pasta TestProject.
No prompt de comando terminal, para criar um novo aplicativo de console em uma pasta especificada, insira o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando da CLI do .NET usa um modelo de programa .NET para criar o novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do arquivo
.csproj.Se uma mensagem for exibida informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
No modo de exibição EXPLORER, expanda a pasta CsharpProjects .
Você deverá ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto em C# chamado TestProject.csproj.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta , selecione a pasta CsharpProjects e selecione Selecionar Pasta.
No modo de exibição EXPLORER, expanda a pasta TestProject e selecione Program.cs.
Exclua as linhas de código existentes.
Você usará esse projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel do terminal.
Escreva uma declaração básica
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está sendo exibido no painel do Editor.
Observação
O arquivo Program.cs deve estar vazio. Selecione e exclua todas as linhas de código existentes caso isso não já não tenha sido feito.
Digite o código a seguir no Editor do Visual Studio Code.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Esse código apresenta uma instrução simples
forque percorre seu bloco de código 10 vezes, imprimindo o valor atual dei.No menu Arquivo do Visual Studio Code, selecione Salvar.
O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir um Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.
Um painel Terminal será aberto. O Terminal deve incluir um prompt de comando mostrando que ele já está aberto no local da pasta TestProject.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Observação
Se você vir uma mensagem dizendo "Não foi possível localizar um projeto a ser executado", verifique se o prompt de comando do Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Deverá ver o seguinte resultado.
0 1 2 3 4 5 6 7 8 9Reserve um minuto para identificar as seis partes da
forafirmação.A declaração
forinclui as seguintes seis partes:- A palavra-chave
for. - Um conjunto de parênteses que define as condições da
foriteração. Os parênteses contêm três partes distintas, separadas pelo operador de fim de instrução, um ponto e vírgula. - A primeira parte define e inicializa a variável de iterador. Neste exemplo:
int i = 0. Esta seção é conhecida como o inicializador. - A segunda parte define a condição de conclusão. Neste exemplo:
i < 10. Em outras palavras, o tempo de execução continuará a iterar sobre o código no bloco de código abaixo da instruçãoforenquantoifor menor que10. Quandoise torna igual a10, o runtime para de executar oforbloco de código da instrução. Os documentos referem-se a esta seção como a condição. - A terceira parte define a ação a ser tomada após cada iteração. Nesse caso, após cada iteração,
i++incrementará o valor deiem 1. Os documentos referem-se a essa seção como o iterador. - Por fim, o bloco de código. O bloco de código contém o código que será executado para cada iteração. Observe que o valor de
ié referenciado dentro do bloco de código. Os documentos referem-se a essa seção como corpo.
Considerando nossas regras para variáveis de nomenclatura, você pode se perguntar se
ié um nome válido para a variável que contém a iteração atual. Nesse caso,ié considerado pela maioria como válido. Outras opções populares sãoxecounter. O nomejtambém é usado nessas situações quando você tem uma instrução externaforque usaie precisa criar uma variável de iteração para uma instrução internafor.Observação
Todas as três seções (inicializador, condição e iterador) são opcionais. No entanto, na prática, normalmente todas as três seções são usadas.
- A palavra-chave
Alterar as condições de iteração
Como declaramos no início, a instrução for tem duas qualidades exclusivas entre as instruções de iteração.
- A instrução
fordeve ser usada quando você sabe quantas vezes precisa iterar em um bloco de código com antecedência. - A
forinstrução permite controlar a maneira como cada iteração é tratada.
E se precisássemos iterar por um bloco de código, mas quiséssemos fazer uma contagem regressiva em vez de uma contagem progressiva?
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Reserve um minuto para examinar o código atualizado.
Ao alterar as três partes da instrução
for, alteramos seu comportamento.- Inicializamos a variável de iteração para 10.
- Alteramos a condição de conclusão para sair da
forinstrução quandoifor menor que0. - Alteramos o padrão do iterador para subtrair
1deia cada vez que concluímos uma iteração.
Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe que a saída foi alterada.
Ao executar o código, você verá a saída a seguir.
10 9 8 7 6 5 4 3 2 1 0
Experimente o padrão do iterador
E se quiséssemos ignorar determinados valores na variável de iterador?
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Reserve um minuto para examinar o código atualizado.
Em vez de incrementar ou decrementar o valor da variável do iterador por
1, usamosi += 3para ignorar dois valores após cada iteração.Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe como a saída foi alterada.
Ao executar o código, você verá a saída a seguir.
0 3 6 9Admito que você não vai fazer esse tipo de coisa muitas vezes, mas espero que você possa apreciar que você tem um nível refinado de controle sobre as iterações se você precisar dele.
Use a palavra-chave break para encerrar a instrução de iteração
E se precisarmos sair da instrução de iteração prematuramente com base em alguma condição? Podemos usar a break palavra-chave.
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Reserve um minuto para examinar o uso da
breakpalavra-chave em seu código atualizado.Vimos a palavra-chave
breakpela primeira vez no módulo "Ramifique o fluxo de código usando a construção switch-case em C#". Como se vê, podemos usar abreakpalavra-chave para sair das instruções de iteração também.Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe como a saída foi alterada.
Ao executar o código, você verá a saída a seguir.
0 1 2 3 4 5 6 7
Percorrer cada elemento de uma matriz
Um uso comum para a instrução for é iterar por uma matriz de elementos, especialmente se você precisar de algum controle sobre a maneira como a iteração acontece. Enquanto o foreach itera por todos os elementos da matriz, a for declaração pode ser ajustada para fornecer mais personalizações.
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Reserve um minuto para examinar o código atualizado.
Primeiro, observe que instanciamos um array de strings chamado
namesque contém quatro nomes.Em seguida, observe que estamos usando a
Array.Lengthpropriedade para obter o número de elementos na matriz e que estamos usando esse valor para inicializar nossa variável de iterador (int i = names.Length - 1). Subtraimos 1 do valor porque o número de índice para elementos de matriz é baseado em zero (os números de índice dos quatro elementos são 0-3).Por fim, observe que escolhemos iterar no matriz de trás para frente, algo que não podemos fazer com a instrução
foreach. Usamos o valor da variável de iteração dentro do bloco de código para especificar o número de índice dos elementos da matriz (names[i]).Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe que os elementos da matriz estão listados em ordem inversa (como queríamos).
Ao executar o código, você verá a saída a seguir.
Michael David Eddie AlexObservação
Poderíamos ter iterado para frente através dos elementos do matriz construindo a instrução
forda seguinte forma:for (int i = 0; i < names.Length; i++).
Examine a limitação da instrução foreach
E se você quiser atualizar um valor na matriz durante uma foreach iteração?
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe a mensagem de erro exibida.
Se você tentar compilar e executar esse código, verá uma exceção.
Cannot assign to name because it is a 'foreach iteration variable'Em outras palavras, você não pode reatribuir o valor de
nameporque ele faz parte da implementação interna da iteraçãoforeach.
Supere a limitação da instrução foreach usando a instrução for
Vamos tentar usar uma for instrução para modificar o conteúdo de uma matriz dentro do bloco de código de iteração.
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);Reserve um minuto para examinar o código atualizado.
Observe que removemos as chaves dos blocos de código que continham apenas uma única linha de código. Essa revisão usa a mesma técnica que falamos no módulo "Controlar escopo e lógica de variável usando blocos de código em C#". Muitos desenvolvedores acham esse estilo difícil de ler, enquanto outros preferem esse estilo abreviado porque ele os ajuda a escrever de forma mais sucinta e expressiva. Se você achar esse código difícil de ler, ou se simplesmente não preferir esse estilo, fique tranquilo, pois as chaves sempre podem ser usadas em seus blocos de código. Se desejar, atualize o código no painel editor com o seguinte código:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Observe que o código é executado sem erro e gera a saída desejada.
Ao executar o código, você verá a saída a seguir.
Alex Eddie Sammy MichaelComo a matriz não faz parte diretamente da implementação da instrução de iteração, você pode alterar valores dentro da matriz.
Recapitulação
Aqui estão algumas das conclusões desta unidade:
- A
forinstrução de iteração permite iterar por meio de um bloco de código um número específico de vezes. - A
forinstrução de iteração permite controlar todos os aspectos da mecânica da iteração alterando as três condições dentro dos parênteses: o inicializador, a condição e o iterador. - É comum usar a instrução
forquando você precisa controlar como deseja iterar por cada item em uma matriz. - Se o seu bloco de código tiver apenas uma linha de código, você pode eliminar as chaves e os espaços em branco, se desejar.