Refactorización de bucles
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 por foreach para mayor simplicidad:
string[] fruits = { "apple", "banana", "cherry" };
// Antes de la refactorización
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// Después de la refactorización
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]);
}Desafío
IntermedioCrea un método llamado refactorArrayFilter que:
- Toma un arreglo de enteros como parámetro
- 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
- 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.
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
}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
1Arrays multidimensionales
Conceptos básicos de arrays 2DDeclaración e inicialización de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DArrays irregularesOperaciones comunes con matricesRepaso: arrays multidimensionales4Técnicas de control de flujo
Retornos anticipadosCláusulas de guardaSentencias de salto (goto)Break y ContinueAplanar condicionales anidados7Operadores lógicos avanzados
Evaluación de cortocircuitoOperadores lógicos condicionalesPrecedencia de operadoresRepaso: operadores avanzados2Toma de decisiones avanzada
Múltiples condicionesLógica booleana complejaComparación entre If y SwitchSentencias Switch anidadasRepaso: decisiones avanzadas5Manejo de excepciones
Fundamentos de Try-CatchTipos de excepcionesMúltiples bloques CatchTrabajo con archivosBloque FinallyUso de Using frente a Try-FinallyExcepciones personalizadasRepaso: manejo de errores3Mejoras de bucles
Rendimiento de buclesIteración de estructuras complejasCada tipo de bucleRefactorización de buclesRepaso: bucles optimizados6Manejo de valores nulos
Conceptos básicos de referencias nulasTipos de valor anulablesPatrones de comprobación de valores nulosProgramación defensivaRepaso: seguridad frente a valores nulosPractica por tu cuenta: Compilador de C# online