Exercício - Criar e configurar loops de iteração
- 14 minutos
À primeira vista, a for instrução é outra instrução de repetição que permite iterar através de um bloco de código e, assim, alterar o fluxo de execução do seu código. No entanto, uma vez que examinamos como cada um funciona, podemos identificar melhor as nuances de cada instrução de iteração e quando usá-las.
Qual é a for declaração?
A for instrução itera através de um bloco de código um número específico de vezes. Esse nível de controle torna a for instrução única entre as outras instruções de iteração. A foreach instrução itera através de 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 através de um bloco de código até que uma condição seja atendida.
Além disso, a for instrução lhe dá muito mais controle sobre o processo iterativo, ao expor as condições para iteração.
Neste exercício, tu usarás a declaração for, aprendendo a controlar a pré-condição da iteração, a condição de conclusão, o seu padrão de iteração e muito mais. Além disso, você aprenderá sobre casos de uso comuns para a for declaração.
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.
Prepare seu ambiente de codificação
Este módulo inclui atividades práticas que o guiam através do processo de criação e execução de 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 para essas atividades ajudará você a se sentir mais confortável escrevendo e executando código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abre Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente para outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta , navegue até a pasta Área de trabalho do Windows.
Se você tiver um local de pasta diferente onde você mantém projetos de código, você pode usar esse local de pasta em vez disso. Para este treinamento, o importante é ter um local que seja fácil de localizar e lembrar.
Na caixa de diálogo Abrir pasta , selecione Selecionar pasta.
Se vir uma caixa de diálogo de segurança a perguntar se confia nos autores, selecione Sim.
No menu Terminal de código do Visual Studio, selecione Novo terminal.
Observe que um prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Observação
Se você estiver trabalhando em seu próprio PC em vez de em uma área restrita ou ambiente hospedado e tiver concluído outros módulos do Microsoft Learn nesta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você pode pular a próxima etapa, que é usada para criar um aplicativo de console na pasta TestProject.
No prompt de comando do Terminal, para criar um novo aplicativo de console em uma pasta especificada, digite o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando .NET CLI usa um modelo de programa .NET para criar um 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 seu
.csprojarquivo.Se for exibida uma mensagem informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
Na visualização EXPLORER, expanda a pasta CsharpProjects .
Você deve ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto C# chamado TestProject.csproj.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta , selecione a pasta CsharpProjects e, em seguida, 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á este projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel Terminal.
Escreva uma declaração básica para
Verifique se você tem o Visual Studio Code aberto e Program.cs exibido no painel Editor.
Observação
Program.cs deve estar vazio. Se não estiver, selecione e exclua todas as linhas de código.
Digite o seguinte código no Editor de Códigos do Visual Studio.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Este código apresenta uma instrução simples
forque percorre seu bloco de código 10 vezes, imprimindo o valor atual dei.No menu File do Visual Studio Code, selecione Guardar.
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 indicando que o Terminal 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 encontrar um projeto para executar", 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
fordeclaração.A
fordeclaração inclui as seguintes seis partes:- A palavra-chave
for. - Um conjunto de parênteses que define as condições de
foriteração. Os parênteses contêm três partes distintas, separadas pelo operador final da instrução, um ponto-e-vírgula. - A primeira parte define e inicializa a variável 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 daforinstrução enquantoié menor que10. Quandoise torna igual a10, o tempo de execução 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. Neste caso, após cada iteração,
i++irá incrementar o valor deipor 1. Os documentos referem-se a esta seção como o iterador. - Finalmente, o bloco de código. O bloco de código contém o código que será executado para cada iteração. Note que o valor de
ié referenciado dentro do bloco de código. Os documentos referem-se a esta secção como o corpo.
Dadas as nossas regras para nomear variáveis, você pode se perguntar se
ié um nome válido para a variável que contém a iteração atual. Neste caso,ié considerado pela maioria como válido. Outras escolhas populares sãoxecounter. O nomejtambém é usado nessas situações em que você tem uma instrução externaforque usai, e 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 as três seções são usadas.
- A palavra-chave
Alterar as condições de iteração
Como afirmamos no início, a for declaração tem duas qualidades únicas entre as declarações de iteração.
- A
forinstrução deve ser usada quando você souber o número de vezes que precisa iterar através de um bloco de código com antecedência. - A
forinstrução permite controlar a maneira como cada iteração é tratada.
E se precisássemos percorrer um bloco de código, mas quiséssemos contar decrescentemente em vez de crescente?
Use o Editor de Códigos do Visual Studio para atualizar seu código da seguinte maneira:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Reserve um minuto para rever o código atualizado.
Ao alterar as três partes da declaração
for, mudamos o seu comportamento.- Inicializamos a variável de iteração para 10.
- Alteramos a condição de terminação para abandonar a instrução
forquandoifor menor que0. - Alteramos o padrão do iterador para subtrair
1deicada vez que completamos uma iteração.
Salve seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu código.Observe que a saída foi alterada.
Ao executar o código, você verá a seguinte saída.
10 9 8 7 6 5 4 3 2 1 0
Experimente o padrão do iterador
E se quiséssemos ignorar certos valores na variável iterador?
Use o Editor de Códigos do Visual Studio para atualizar seu código da seguinte maneira:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Reserve um minuto para rever o código atualizado.
Em vez de incrementar ou diminuir o valor da variável iteradora pelo
1, usamosi += 3para ignorar dois valores após cada iteração.Salve seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu código.Observe como a saída mudou.
Ao executar o código, você verá a seguinte saída.
0 3 6 9É certo que você não fará esse tipo de coisa com frequência, mas espero que você possa apreciar que você tem um nível refinado de controle sobre as iterações, caso precise dele.
Use a palavra-chave break para quebrar a instrução de iteração
E se precisarmos sair da declaração de iteração prematuramente com base em alguma condição? Podemos usar a break palavra-chave.
Use o Editor de Códigos do Visual Studio para atualizar seu código da seguinte maneira:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Tire um minuto para rever o uso da palavra-chave
breakno seu código atualizado.Vimos pela primeira vez a palavra-chave
breakno módulo "Ramo do 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu código.Observe como a saída mudou.
Ao executar o código, você verá a seguinte saída.
0 1 2 3 4 5 6 7
Percorrer cada elemento de uma matriz
Um uso comum para a for instrução é iterar através de uma matriz de elementos, especialmente se você precisar de algum controle sobre a maneira como a iteração acontece. Enquanto a foreach itera por cada elemento do array, a instrução for pode ser adaptada para fornecer mais personalizações.
Use o Editor de Códigos do Visual Studio 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 rever o código atualizado.
Primeiro, observe que instanciamos uma matriz de cadeia de caracteres chamada
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 iteradora (int i = names.Length - 1). Subtraímos 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).Finalmente, observe que optámos por percorrer o vetor de trás para a frente - algo que não somos capazes de fazer com a
foreachinstrução. 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu código.Observe que os elementos da matriz são listados em ordem inversa (como pretendíamos).
Ao executar o código, você verá a seguinte saída.
Michael David Eddie AlexObservação
Poderíamos ter iterado pelos elementos da matriz construindo a
fordeclaração da seguinte maneira:for (int i = 0; i < names.Length; i++).
Examinar a limitação da instrução (comando) foreach
E se você quiser atualizar um valor na matriz durante uma foreach iteração?
Use o Editor de Códigos do Visual Studio 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu 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, não se pode reatribuir o valor de
nameporque ele faz parte da implementação interna daforeachiteração.
Superando 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 de Códigos do Visual Studio 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 rever o código atualizado.
Observe que retirámos as chaves dos blocos de código que continham apenas uma única linha de código. Esta revisão usa a mesma técnica que falamos no módulo "Controle de escopo variável e lógica usando blocos de código em C#". Muitos desenvolvedores acham esse estilo difícil de ler, enquanto outros preferem esse estilo abreviado porque os ajuda a escrever de forma mais sucinta e mais expressiva. Se você achar esse código difícil de ler, ou se simplesmente não preferir esse estilo, tenha certeza de que 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 seu arquivo de código e, em seguida, use o Visual Studio Code para executar seu código.
Digite
dotnet runno prompt de comando do Terminal para executar o seu código.Observe que o código é executado sem erro e gera a saída desejada.
Ao executar o código, você verá a seguinte saída.
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 que você itere através de um bloco de código um número específico de vezes. - A instrução de iteração
forpermite controlar todos os aspetos 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 precisas de controlar como pretendes iterar por cada item num array. - Se o seu bloco de código tiver apenas uma linha de código, você pode eliminar as chaves e o espaço em branco, se desejar.