Menu
Coddy logo textTech

Refactoring Loops

Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 16 de 66.

La refactorización de bucles puede mejorar la legibilidad y mantenibilidad del código.

Reemplaza el bucle tradicional con foreach para mayor simplicidad:

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

Extraer lógica compleja de bucles en 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;
}

Divide bucles grandes en bucles más pequeños y enfocados:

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

// Antes: Un bucle grande que hace múltiples cosas
for (int i = 0; i < data.Length; i++)
{
    // Procesar datos
    data[i] = data[i] * 2;
    // Imprimir resultados
    Console.WriteLine(data[i]);
}

// Después: Bucles separados con propósitos claros
// Procesar datos
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

Desafío

Intermedio

Crea un método llamado refactorArrayFilter que:

  1. Toma un arreglo de enteros como parámetro
  2. Implementa dos versiones de código que cuenten números divisibles por 3:
    • Original: Usa un bucle for tradicional con una sentencia if
    • Refactorizado: Usa un bucle foreach con la lógica extraída a un método auxiliar
  3. Devuelve la cuenta de la versión refactorizada como un entero

Por ejemplo, dado el arreglo [3, 4, 6, 7, 9], el método debería devolver 3 porque hay tres números (3, 6 y 9) que son divisibles por 3.

Nota: No necesitas imprimir nada - solo devuelve la cuenta como un entero.

Hoja de referencia

Usa foreach en lugar de bucles for tradicionales para una iteración de arrays más simple:

// 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);
}

Extrae la lógica compleja de bucles en 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;
}

Divide bucles grandes en bucles más pequeños y enfocados con 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
}

Pruébalo tú mismo

public class RefactorArrayFilter
{
    // Implementa el método refactorArrayFilter
    public static int refactorArrayFilter(int[] numbers)
    {
        // Escribe tu código aquí
        
    }
    
    // Implementa cualquier método auxiliar que necesites
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo