Menu
Coddy logo textTech

Refactoring Loops

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 16 de 66.

Refatorar loops pode melhorar a legibilidade e a manutenibilidade do código.

Substitua o loop tradicional por foreach para simplicidade:

string[] fruits = { "apple", "banana", "cherry" };

// Before refactoring
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// After refactoring
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

Extraia a lógica complexa do loop em métodos:

int[] numbers = { 1, 2, 3, 4, 5, 6 };

// Before refactoring
for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i] % 2 == 0)
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// After refactoring with helper method
for (int i = 0; i < numbers.Length; i++)
{
    if (IsEven(numbers[i]))
    {
        Console.WriteLine($"{numbers[i]} is even");
    }
}

// Helper method
bool IsEven(int number)
{
    return number % 2 == 0;
}

Quebre loops grandes em loops menores e mais focados:

int[] data = { 1, 2, 3, 4, 5 };

// Antes: Um loop grande fazendo múltiplas coisas
for (int i = 0; i < data.Length; i++)
{
    // Process data
    data[i] = data[i] * 2;
    // Print results
    Console.WriteLine(data[i]);
}

// Depois: Loops separados com propósitos claros
// Processar dados
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;
}

// Imprimir resultados
for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);
}
challenge icon

Desafio

Médio

Crie um método chamado refactorArrayFilter que:

  1. Recebe um array de inteiros como parâmetro
  2. Implementa duas versões de código que contam números divisíveis por 3:
    • Original: Use um laço for tradicional com uma instrução if
    • Refactored: Use um laço foreach com a lógica extraída para um método auxiliar
  3. Retorna a contagem da versão refatorada como um inteiro

Por exemplo, dado o array [3, 4, 6, 7, 9], o método deve retornar 3 porque há três números (3, 6 e 9) que são divisíveis por 3.

Nota: Você não precisa imprimir nada - apenas retorne a contagem como um inteiro.

Folha de consulta

Use foreach em vez de loops for tradicionais para iteração de array mais simples:

// Traditional for loop
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine(fruits[i]);
}

// Refactored with foreach
foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}

Extraia lógica complexa de loop para métodos auxiliares:

// Before refactoring
if (numbers[i] % 2 == 0)
{
    Console.WriteLine($"{numbers[i]} is even");
}

// After refactoring with helper method
if (IsEven(numbers[i]))
{
    Console.WriteLine($"{numbers[i]} is even");
}

// Helper method
bool IsEven(int number)
{
    return number % 2 == 0;
}

Divida loops grandes em loops menores e focados com responsabilidades únicas:

// Before: One loop doing multiple things
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // Process
    Console.WriteLine(data[i]);  // Print
}

// After: Separate loops with clear purposes
for (int i = 0; i < data.Length; i++)
{
    data[i] = data[i] * 2;  // Process only
}

for (int i = 0; i < data.Length; i++)
{
    Console.WriteLine(data[i]);  // Print only
}

Experimente você mesmo

public class RefactorArrayFilter
{
    // Implemente o método refactorArrayFilter
    public static int refactorArrayFilter(int[] numbers)
    {
        // Escreva seu código aqui
        
    }
    
    // Implemente quaisquer métodos auxiliares que precisar
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo