Appiattire le condizioni annidate
Fa parte della sezione Logica e flusso del percorso C# di Coddy. Lezione 22 di 66.
Le condizioni annidate possono rendere difficile leggere e mantenere il codice. Appiattirle aiuta a migliorare la leggibilità riducendo i livelli di indentazione.
Ecco un esempio di condizionali annidati in profondità:
if (userLoggedIn)
{
if (userHasPermission)
{
if (fileExists)
{
// Elabora il file
ProcessFile();
}
else
{
Console.WriteLine("File not found");
}
}
else
{
Console.WriteLine("No permission");
}
}
else
{
Console.WriteLine("Not logged in");
}
Possiamo appiattire questo codice usando i ritorni anticipati o le clausole di guardia:
if (!userLoggedIn)
{
Console.WriteLine("Not logged in");
return;
}
if (!userHasPermission)
{
Console.WriteLine("No permission");
return;
}
if (!fileExists)
{
Console.WriteLine("File not found");
return;
}
// Elabora il file
ProcessFile();
Nota che il codice appiattito ha meno rientri ed è più facile da seguire.
Sfida
FacileNel controllo dell'idoneità alle borse di studio, le condizioni annidate in profondità rendono il codice difficile da leggere e mantenere. In questa sfida, trasformerai una struttura di condizioni annidate disordinata in codice pulito e leggibile usando le clausole di guardia.
Una clausola di guardia è un'istruzione di ritorno anticipato che gestisce subito una condizione specifica, consentendo al resto della funzione di concentrarsi sul «percorso felice».
Il tuo compito è completare le clausole di guardia implementate parzialmente nel metodo CheckScholarshipEligibility secondo queste regole:
- Se l'età è inferiore a 17, restituisci subito "Not eligible due to age requirement"
- Se GPA ≥ 3.5 E lo studente ha una raccomandazione, assegna una borsa di studio completa
- Se GPA ≥ 3.8, assegna una borsa di studio completa (anche senza raccomandazione)
- Se GPA ≥ 3.0 E lo studente ha una raccomandazione, assegna una borsa di studio parziale
- Se GPA è compreso tra 3.5 e 3.8, assegna una borsa di studio parziale
- In tutti gli altri casi, restituisci "Not eligible for scholarship"
Provalo tu
using System;
class Program
{
public static void CheckScholarshipEligibility(int age, double gpa, bool hasRecommendation)
{
// Clausola di guardia per il requisito di età
if (age < 17)
{
Console.WriteLine("Not eligible due to age requirement.");
return;
}
// Clausola di guardia per la borsa di studio completa con lettera di raccomandazione
if (/* Completa questa condizione */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// Clausola di guardia per la borsa di studio completa con un GPA eccezionale
if (/* Completa questa condizione */)
{
Console.WriteLine("Full scholarship granted!");
return;
}
// Clausola di guardia per la borsa di studio parziale con lettera di raccomandazione
if (/* Completa questa condizione */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// Clausola di guardia per la borsa di studio parziale con un buon GPA
if (/* Completa questa condizione */)
{
Console.WriteLine("Partial scholarship granted.");
return;
}
// Caso predefinito: non idoneo
Console.WriteLine("Not eligible for scholarship.");
}
static void Main(string[] args)
{
// Casi di test per un riscontro immediato
Console.WriteLine("Test Case 1: Age 16, GPA 4.0, Has Recommendation: True");
CheckScholarshipEligibility(16, 4.0, true);
Console.WriteLine("\nTest Case 2: Age 18, GPA 3.9, Has Recommendation: False");
CheckScholarshipEligibility(18, 3.9, false);
Console.WriteLine("\nTest Case 3: Age 17, GPA 3.6, Has Recommendation: True");
CheckScholarshipEligibility(17, 3.6, true);
Console.WriteLine("\nTest Case 4: Age 19, GPA 3.2, Has Recommendation: True");
CheckScholarshipEligibility(19, 3.2, true);
Console.WriteLine("\nTest Case 5: Age 18, GPA 2.8, Has Recommendation: False");
CheckScholarshipEligibility(18, 2.8, false);
}
}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