Retours anticipés
Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 18 sur 66.
Les retours anticipés sont une technique où nous quittons une méthode dès que nous avons la réponse ou rencontrons une condition invalide, plutôt que d'imbriquer des conditionnels.
Comparons deux approches pour valider un nom d'utilisateur :
Sans retours anticipés (conditionnels imbriqués) :
public bool ValidateUsername(string username)
{
bool isValid = false;
if (username != null)
{
if (username.Length >= 3)
{
if (username.Length <= 20)
{
isValid = true;
}
}
}
return isValid;
}Avec des retours anticipés :
public bool ValidateUsername(string username)
{
// Retour anticipé si username est null
if (username == null)
return false;
// Retour anticipé si username est trop court
if (username.Length < 3)
return false;
// Retour anticipé si username est trop long
if (username.Length > 20)
return false;
// Si nous arrivons ici, username est valide
return true;
}Les retours anticipés rendent le code plus lisible et réduisent les niveaux d'indentation.
Défi
FacileÉcrivez une méthode appelée ProcessPayment qui détermine si un paiement peut être traité en fonction de :
- Le montant du paiement doit être positif
- Le solde du compte doit être suffisant
- Le compte ne doit pas être verrouillé
Utilisez des retours précoces pour vérifier chaque condition et retourner les messages d'erreur appropriés.
La méthode doit :
- Prendre trois paramètres :
decimal paymentAmount,decimal accountBalance, etbool isAccountLocked - Retourner une chaîne avec soit "Payment processed successfully" soit un message d'erreur
- Utiliser des retours précoces pour la validation
Imprimez les messages d'erreur exactement dans ces formats :
- "Error: Payment amount must be positive"
- "Error: Insufficient funds"
- "Error: Account is locked"
Aide-mémoire
Les retours précoces sortent d'une méthode immédiatement lorsqu'une condition est remplie, évitant les conditionnels imbriqués et réduisant l'indentation.
Sans retours précoces (conditionnels imbriqués) :
public bool ValidateUsername(string username)
{
bool isValid = false;
if (username != null)
{
if (username.Length >= 3)
{
if (username.Length <= 20)
{
isValid = true;
}
}
}
return isValid;
}Avec retours précoces :
public bool ValidateUsername(string username)
{
// Retour précoce si username est null
if (username == null)
return false;
// Retour précoce si username est trop court
if (username.Length < 3)
return false;
// Retour précoce si username est trop long
if (username.Length > 20)
return false;
// Si nous arrivons ici, username est valide
return true;
}Les retours précoces rendent le code plus lisible et réduisent les niveaux d'indentation.
Essayez vous-même
using System;
public class Program
{
public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
{
// Écrivez votre code ici
}
public static void Main(string[] args)
{
decimal paymentAmount = decimal.Parse(Console.ReadLine());
decimal accountBalance = decimal.Parse(Console.ReadLine());
bool isAccountLocked = bool.Parse(Console.ReadLine());
string result = ProcessPayment(paymentAmount, accountBalance, isAccountLocked);
Console.WriteLine(result);
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Tableaux multidimensionnels
Bases des tableaux 2DDéclaration et initialisation en 2DAccès aux éléments d'un tableau 2DBoucles imbriquées et tableaux 2DTableaux irréguliersOpérations matricielles courantesRécapitulatif - Multidimensionnel4Techniques de contrôle de flux
Retours anticipésClauses de gardeInstructions de saut (goto)Break et ContinueAplatir les conditionnelles imbriquées2Prise de décision avancée
Conditions multiplesLogique booléenne complexeComparaison If vs SwitchInstructions Switch imbriquéesRécapitulatif - Décisions avancées5Gestion des exceptions
Bases du Try-CatchTypes d'exceptionsBlocs Catch multiplesManipulation de fichiersLe bloc FinallyUsing vs Try-FinallyExceptions personnaliséesRécapitulatif - Gestion des erreurs3Améliorations des boucles
Performance des bouclesItération de structures complexesChaque type de boucleRefactorisation des bouclesRécapitulatif - Boucles optimisées6Gestion des valeurs nulles
Les bases des références nullesTypes valeur nullablesPatterns de vérification de nullitéProgrammation défensiveRécapitulatif - Null Safety