Ir para o conteúdo

Iterar por meio de um bloco de código usando a instrução for

Usar a instrução de iteração for para fazer loop um número predefinido de vezes e controlar o processo de iteração.

Neste módulo, você começará escrevendo instruções for que farão a interação um número específico de vezes. Depois de implementar uma instrução for básica, você aprenderá a implementar instruções for que fazem a interação de trás para frente em uma matriz, ignoram elementos da matriz durante uma iteração ou processam apenas elementos especificados dela (alterando o inicializador, a condição e o iterador da instrução for).

Ao final deste módulo, você será capaz de usar instruções for para implementar a lógica de loop quando as instruções foreach não derem suporte ao cenário.

Objetivos de aprendizagem

  • Usar a instrução for para passar o loop por um bloco de código
  • Modificar como o .NET Runtime executa a lógica de loop, alterando o valor do iterador, a condição e o padrão.
  • Examinar a sintaxe da instrução for que permite controlar o padrão de iteração.

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 instrução for exclusiva entre as outras instruções de iteração. A instrução foreach itera 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.

O loop for é usado quando o número de iterações é conhecido antecipadamente. Ele consiste em três partes principais: inicialização, condição e incremento/decremento.

```csharp
for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"O valor de i é: {i}");
}
```

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.

Exemplo com break:

```csharp
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(i);
    if (i == 7) break;
}
```

Exemplo com matriz:

```csharp
string[] names = { "Alex", "Eddie", "David", "Michael" };
for (int i = names.Length - 1; i >= 0; i--)
{
    Console.WriteLine(names[i]);
}
```

Observação: Poderíamos ter iterado para frente através dos elementos do matriz construindo a instrução for da seguinte forma: for (int i = 0; i < names.Length; i++).

Exemplo de limitação da instrução foreach:

```csharp
string[] names = { "Alex", "Eddie", "David", "Michael" };
foreach (var name in names)
{
    // Can't do this:
    if (name == "David") name = "Sammy";
}
```

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

Em outras palavras, você não pode reatribuir o valor de name porque ele faz parte da implementação interna da iteração foreach.

Supere a limitação da instrução foreach usando a instrução for:

```csharp
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);
```

Output: Alex, Eddie, Sammy, Michael

Outra versão do exemplo anterior, mas com uma apresentação diferente:

```csharp
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);
}
```

Recapitulação

  • A instrução de iteração for permite iterar por meio de um bloco de código um número específico de vezes.
  • A instrução de iteração for 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;
  • o iterador.
  • É comum usar a instrução for quando 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.

Modificar o inicializador, a condição e o iterador de uma for instrução fornece controle preciso sobre a lógica de iteração.