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]);
}Desafio
MédioCrie um método chamado refactorArrayFilter que:
- Recebe um array de inteiros como parâmetro
- 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
- 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
}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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety