Exercício – Criar e configurar loops de iteração

Concluído

Na superfície, a instrução for é outra instrução de iteração que permite iterar por meio de um bloco de código e, assim, alterar o fluxo de execução do seu código. No entanto, depois de examinarmos como cada uma delas funciona, podemos identificar melhor as nuances de cada instrução de iteração e quando usá-las.

Qual é a instrução for?

A instrução for itera por meio de um bloco de código um número específico de vezes. Esse nível de controle torna a instrução for exclusiva entre as demais instruções de iteração. A instrução foreach itera por meio de um bloco de código uma vez para cada item em uma sequência de dados como uma matriz ou coleção. A instrução while 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 de 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, seu padrão de iteração e mais. Além disso, você aprenderá casos de uso comuns para a instrução for.

Ok, agora vamos preparar nosso ambiente de codificação e começar a examinar exemplos de código que implementam a instrução for.

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 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.

  1. 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.

  2. No Visual Studio Code, no menu Arquivo, selecione Abrir Pasta.

  3. Na caixa de diálogo Abrir Pasta, navegue até a pasta Área de Trabalho do Windows.

    Se você tiver um local de pasta diferente no qual mantém os projetos de código, poderá usar esse local de pasta. Neste treinamento, o importante é ter um local que seja fácil de localizar e lembrar.

  4. 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.

  5. No Visual Studio Code, no menu Terminal, 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.

  6. No prompt de comando Terminal, para criar o novo aplicativo de console na pasta especificada, digite dotnet new console -o ./CsharpProjects/TestProject e pressione Enter.

    Este 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 nós e usa TestProject como o nome do nosso arquivo .csproj.

  7. No painel EXPLORER, expanda a pasta CsharpProjects.

    Você deve ver a pasta TestProject e dois arquivos: o arquivo de programa do C#, denominado Program.cs, e o arquivo de projeto do C#, denominado TestProject.csproj.

  8. No painel EXPLORER, para exibir o arquivo de código no painel Editor, selecione Program.cs.

  9. 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.

  10. Feche o painel do terminal.

Escrever uma instrução for básica

  1. 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. Se não estiver, selecione e exclua todas as linhas de código existentes.

  2. 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 for simples que percorre o bloco de código em questão dez vezes, imprimindo o valor atual de i a cada iteração.

  3. No menu Arquivo do Visual Studio Code, selecione Salvar.

    O arquivo Program.cs deve ser salvo antes de criar ou executar o código.

  4. No painel EXPLORER, para abrir o 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 o Terminal está aberto no local da pasta TestProject.

  5. No prompt de comando Terminal, para executar seu código, digite executar dotnet e pressione Enter.

    Observação

    Se você vir uma mensagem com a mensagem "Não foi possível encontrar um projeto a ser executado", verifique se o prompt de comando Terminal exibe o local esperado da pasta TestProject. Por exemplo: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    A saída a seguir será exibida.

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
  6. Reserve um minuto para identificar as seis partes da instrução for.

    A instrução for inclui as seis partes seguintes:

    1. A palavra-chave for.
    2. Um par de parênteses que define as condições da iteração for. O par de parênteses contém três partes distintas, separadas pelo operador de fim de instrução (ponto e vírgula).
    3. A primeira parte define e inicializa a variável de iterador. Neste exemplo: int i = 0. Esta seção é chamada de inicializador.
    4. A segunda parte define a condição de conclusão. Neste exemplo: i < 10. Em outras palavras, o tempo de execução continuará iterando sobre o código no bloco de código embaixo da instrução for, enquanto i for menor que 10. Quando i se torna igual a 10, o runtime para de executar o bloco de código da instrução do for. Os documentos referem-se a esta seção como a condição.
    5. A terceira parte define a ação a ser executada após cada iteração. Nesse caso, após cada iteração, i++ incrementará o valor de i em 1. Os documentos referem-se a esta seção como o iterador.
    6. Finalmente, o bloco de código. O bloco de código contém o código que será executado a cada iteração. Observe que o valor de i é referenciado dentro do bloco de código. Os documentos referem-se a esta seção como o corpo.

    Considerando nossas regras para variáveis de nomenclatura, você pode estar se perguntando se i é um nome válido para a variável que armazena a iteração atual. Nesse caso, i é considerado válido pela maioria. Outras opções populares são x e counter. O nome j também é usado nas situações em que você tem uma instrução for externa que usa i e precisa criar uma variável de iteração para uma instrução for interna.

    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 condições são usadas.

Alterar as condições da iteração

Como dissemos no início, a instrução for tem duas qualidades exclusivas entre instruções de iteração.

  • A instrução for deve ser usada quando você sabe o número de vezes que precisa iterar por meio de um bloco de código antes do tempo.
  • A instrução for permite que você controle a maneira como cada iteração é manipulada.

E se precisássemos iterar por meio de um bloco de código, mas desejamos contar regressivamente em vez de progressivamente?

  1. Use o Editor do Visual Studio Code para alterar seu código da seguinte maneira:

    for (int i = 10; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
    
  2. Reserve um minuto para analisar o código atualizado.

    Alterando três partes da instrução for, alteramos seu comportamento.

    • Inicializamos a variável de iteração como 10.
    • Alteramos a condição de conclusão para sair da instrução for quando i for menor que 0.
    • Alteramos o padrão do iterador para subtrair 1 de i toda vez que concluirmos uma iteração.
  3. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  4. Observe que a saída foi alterada.

    Quando executar o código, você verá a saída a seguir.

    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    

Faça experimentos com o padrão do iterador

E se quiséssemos ignorar determinados valores na variável do iterador?

  1. Use o Editor do Visual Studio Code para alterar seu código da seguinte maneira:

    for (int i = 0; i < 10; i += 3)
    {
        Console.WriteLine(i);
    }
    
  2. Reserve um minuto para analisar o código atualizado.

    Em vez de incrementar ou decrementar o valor da variável de iterador em 1, usamos i += 3 para ignorar dois valores após cada iteração.

  3. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  4. Observe como a saída foi alterada.

    Quando executar o código, você verá a saída a seguir.

    0
    3
    6
    9
    

    É fato que você não fará esse tipo de coisa com frequência, mas agora já sabe que é possível exercer esse nível de controle refinado sobre as iterações, caso necessário.

Usar a palavra-chave break para interromper a instrução de iteração

E se for necessário sair da instrução de iteração prematuramente com base em alguma condição? Podemos usar a palavra-chave break.

  1. Use o Editor do Visual Studio Code para alterar seu código da seguinte maneira:

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
        if (i == 7) break;
    }
    
  2. Reserve um minuto para examinar o uso da palavra-chave break em seu código atualizado.

    Primeiro vimos a palavra-chave break no módulo "Ramificar o fluxo de código usando o constructo de mudança de caso em C#". Na verdade, podemos usar a palavra-chave break para sair também de instruções fora de iteração.

  3. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  4. Observe como a saída foi alterada.

    Quando 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 da instrução for é iterar por meio de uma matriz de elementos, principalmente se você precisar ter algum controle sobre a maneira como ocorre a iteração. Embora o foreach itere por meio de cada elemento da matriz, a instrução for pode ser ajustada para fornecer mais personalização.

  1. Use o Editor do Visual Studio Code para alterar 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]);
    }
    
  2. Reserve um minuto para analisar o código atualizado.

    Primeiro, observe que instanciamos uma matriz de cadeia de caracteres chamada names que contém quatro nomes.

    Em seguida, observe que estamos usando a propriedade Array.Length para obter o número de elementos da matriz e que estamos usando esse valor para inicializar nossa variável de iteração (int i = names.Length - 1). Subtraímos 1 do valor porque o número dos índices dos elementos da matriz começa a contar no zero (os índices dos quatro elementos da matriz vão de 0 a 3).

    Por fim, observe que escolhemos percorrer os índices da 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 do índice dos elementos da matriz (names[i]).

  3. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  4. Observe que os elementos da matriz são listados em ordem inversa (como pretendíamos).

    Quando executar o código, você verá a saída a seguir.

    Michael
    David
    Eddie
    Alex
    

    Observação

    Poderíamos ter percorrido os elementos da matriz na ordem normal, do início ao fim, construindo a instrução for da seguinte maneira: for (int i = 0; i < names.Length; i++).

Examinar as limitações da instrução foreach

E se você quiser atualizar um valor na matriz durante uma iteração foreach?

  1. Use o Editor do Visual Studio Code para alterar 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";
    }
    
  2. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  3. Observe a mensagem de erro exibida.

    Se tentar compilar e executar esse código, você verá uma exceção.

    Cannot assign to name because it is a 'foreach iteration variable'
    

    Em outras palavras, não é possível reatribuir o valor de name porque ele faz parte da implementação interna da iteração foreach.

Como superar a limitação da instrução foreach usando a instrução for

Vamos tentar usar uma instrução for para modificar o conteúdo de uma matriz dentro do bloco de código da iteração.

  1. Use o Editor do Visual Studio Code para alterar 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); 
    
  2. Reserve um minuto para analisar o código atualizado.

    Observe que removemos as chaves dos blocos de código que continham apenas uma linha de código. Essa revisão usa a mesma técnica que abordamos no módulo "Controlar o escopo da variável e a 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 modo mais sucinto e expressivo. Se você achar esse código difícil de ler ou se simplesmente não preferir esse estilo, fique à vontade para usar as chaves sempre que quiser em seus blocos de código. Se desejar, atualize o código no painel do Editor 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);
    }
    
  3. Salve o arquivo de código e use o Visual Studio Code para executá-lo.

    Insira dotnet run no prompt de comando do Terminal para executar o código.

  4. Observe que o código é executado sem erros e gera a saída desejada.

    Quando executar o código, você verá a saída a seguir.

    Alex
    Eddie
    Sammy
    Michael
    

    Como a matriz não faz parte diretamente da implementação da instrução de iteração, é possível alterar os valores dentro da matriz.

Recapitulação

Veja alguns itens importantes desta unidade:

  • A instrução de iteração for permite que você itere por meio de um bloco de código um número específico de vezes.
  • A instrução de iteração for permite que você controle cada aspecto 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 for quando você precisa controlar como deseja iterar por meio de cada item em uma matriz.
  • Se o bloco de código tiver apenas uma linha de código, você poderá eliminar as chaves e o espaço em branco, se desejar.

Verificação de conhecimentos

1.

Qual das instruções for a seguir está correta?

2.

Qual das instruções a seguir deve ser usada para sair de um loop for antes que a iteração seja concluída?