Rifattorizzare i cicli
Fa parte della sezione Logica e flusso del percorso C# di Coddy. Lezione 16 di 66.
Il refactoring dei cicli può migliorare la leggibilità e la manutenibilità del codice.
Sostituisci il ciclo tradizionale con foreach per semplicità:
string[] fruits = { "apple", "banana", "cherry" };
// Prima del refactoring
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine(fruits[i]);
}
// Dopo il refactoring
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}Estrai la logica complessa dei cicli in metodi:
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// Antes de la refactorización
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] % 2 == 0)
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// Después de la refactorización con un método auxiliar
for (int i = 0; i < numbers.Length; i++)
{
if (IsEven(numbers[i]))
{
Console.WriteLine($"{numbers[i]} is even");
}
}
// Método auxiliar
bool IsEven(int number)
{
return number % 2 == 0;
}Suddividi i cicli lunghi in cicli più brevi e mirati:
int[] data = { 1, 2, 3, 4, 5 };
// Prima: un unico ciclo che svolge più operazioni
for (int i = 0; i < data.Length; i++)
{
// Elabora i dati
data[i] = data[i] * 2;
// Stampa i risultati
Console.WriteLine(data[i]);
}
// Dopo: cicli separati con scopi chiari
// Elabora i dati
for (int i = 0; i < data.Length; i++)
{
data[i] = data[i] * 2;
}
// Stampa i risultati
for (int i = 0; i < data.Length; i++)
{
Console.WriteLine(data[i]);
}Sfida
MedioCrea un metodo chiamato refactorArrayFilter che:
- Accetta un array di interi come parametro
- Implementa due versioni di codice che contano i numeri divisibili per 3:
- Originale: usa un ciclo for tradizionale con un'istruzione if
- Rifattorizzata: usa un ciclo foreach con la logica estratta in un metodo helper
- Restituisce il conteggio della versione rifattorizzata come intero
Ad esempio, dato l'array [3, 4, 6, 7, 9], il metodo dovrebbe restituire 3 perché ci sono tre numeri (3, 6 e 9) divisibili per 3.
Nota: non è necessario stampare nulla: restituisci semplicemente il conteggio come intero.
Provalo tu
public class RefactorArrayFilter
{
// Implementa il metodo refactorArrayFilter
public static int refactorArrayFilter(int[] numbers)
{
// Scrivi qui il tuo codice
}
// Implementa tutti i metodi di supporto necessari
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Array multidimensionali
Fondamenti degli array 2DDichiarare e inizializzare array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DArray irregolariOperazioni comuni sulle matriciRipasso: array multidimensionali4Tecniche di controllo del flusso
Uscite anticipateClausole di guardiaIstruzioni di salto (goto)Break e continueAppiattire le condizioni annidate2Decisioni avanzate
Condizioni multipleLogica booleana complessaConfronto tra if e switchIstruzioni switch annidateRiepilogo - decisioni avanzate5Gestione delle eccezioni
Nozioni di base su try-catchTipi di eccezioneBlocchi catch multipliLavorare con i fileBlocco finallyUsing vs. try-finallyEccezioni personalizzateRiepilogo - gestione degli errori3Miglioramenti dei cicli
Prestazioni dei cicliIterare strutture complesseOgni tipo di cicloRifattorizzare i cicliRiepilogo - Cicli ottimizzati6Gestione dei valori null
Fondamenti dei riferimenti nullTipi valore nullableSchemi di controllo dei valori nullProgrammazione difensivaRiepilogo: sicurezza rispetto ai valori nullEsercitati da solo: Compilatore C# online