Arguments nommés
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 49 sur 70.
Les arguments nommés vous permettent de spécifier quel paramètre reçoit une valeur en utilisant son nom, plutôt que de vous fier à sa position. Cela rend les appels de méthode plus clairs et vous permet de passer des arguments dans n'importe quel ordre.
Utilisez le nom du paramètre suivi de deux-points avant la valeur :
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Utilisation d'arguments nommés
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // N'importe quel ordre fonctionneLes arguments nommés brillent lorsqu'ils sont combinés avec des paramètres optionnels. Au lieu de fournir toutes les valeurs optionnelles précédentes, vous pouvez passer directement à celle dont vous avez besoin :
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Ignorer port et useSSL, spécifier uniquement timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Vous pouvez mélanger des arguments positionnels et nommés, mais les arguments positionnels doivent figurer en premier. Les arguments nommés améliorent la lisibilité, en particulier pour les méthodes comportant plusieurs paramètres du même type ou des indicateurs (flags) booléens dont la signification n'est pas évidente à partir de la seule valeur.
Défi
FacileConstruisons un générateur de rapports qui tire parti des arguments nommés pour rendre les appels de méthode parfaitement clairs. Lorsque les méthodes ont plusieurs paramètres - en particulier ceux du même type ou des drapeaux booléens - les arguments nommés rendent votre code auto-documenté.
Vous organiserez votre code sur deux fichiers :
ReportGenerator.cs: Créez une classeReportGeneratordans l'espace de nomsReportsavec une méthode possédant plusieurs paramètres optionnels :GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Cette méthode doit retourner une chaîne formatée décrivant la configuration du rapport
- Format :
Report: {title} by {author} | Header: {Yes/No}, Summary: {Yes/No}, Max Pages: {maxPages}
Program.cs: Dans votre fichier principal, démontrez la puissance des arguments nommés en appelantGenerateReportde différentes manières - en sautant les paramètres optionnels dont vous n'avez pas besoin et en spécifiant uniquement ceux qui comptent pour chaque rapport.
Vous recevrez trois entrées :
- Titre du premier rapport
- Titre du deuxième rapport
- Titre du troisième rapport
Générez trois rapports avec des configurations différentes :
- Premier rapport : Utilisez uniquement le titre (tous les paramètres par défaut s'appliquent)
- Deuxième rapport : Utilisez le titre avec
includeSummary: trueetmaxPages: 25(sautez author et includeHeader, en conservant leurs valeurs par défaut) - Troisième rapport : Utilisez le titre avec
author: "Admin",includeHeader: false, etincludeSummary: true(conservez la valeur par défaut de maxPages)
Affichez le résultat de chaque rapport sur sa propre ligne.
Par exemple, si les entrées sont Sales Q1, Annual Review, et Inventory Check, la sortie devrait être :
Report: Sales Q1 by Anonymous | Header: Yes, Summary: No, Max Pages: 10
Report: Annual Review by Anonymous | Header: Yes, Summary: Yes, Max Pages: 25
Report: Inventory Check by Admin | Header: No, Summary: Yes, Max Pages: 10Remarquez comment les arguments nommés vous permettent d'accéder directement aux paramètres qui vous intéressent - vous n'avez pas besoin de spécifier author ou includeHeader juste pour modifier includeSummary. Cela rend vos appels de méthode beaucoup plus lisibles et révélateurs d'intention !
Aide-mémoire
Les arguments nommés vous permettent de spécifier quel paramètre reçoit une valeur en utilisant son nom, plutôt que de se fier à sa position. Cela rend les appels de méthode plus clairs et vous permet de passer des arguments dans n'importe quel ordre.
Utilisez le nom du paramètre suivi d'un deux-points avant la valeur :
public static void CreateUser(string name, int age, bool isActive)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
// Utilisation d'arguments nommés
CreateUser(name: "Alice", age: 25, isActive: true);
CreateUser(age: 30, isActive: false, name: "Bob"); // N'importe quel ordre fonctionneLes arguments nommés fonctionnent bien avec les paramètres optionnels. Vous pouvez passer directement au paramètre dont vous avez besoin sans fournir toutes les valeurs optionnelles précédentes :
public static void Configure(string host, int port = 8080, bool useSSL = false, int timeout = 30)
{
Console.WriteLine($"{host}:{port}, SSL: {useSSL}, Timeout: {timeout}");
}
// Ignorer port et useSSL, spécifier uniquement timeout
Configure("localhost", timeout: 60);
Configure("server.com", useSSL: true);Vous pouvez mélanger des arguments positionnels et nommés, mais les arguments positionnels doivent venir en premier. Les arguments nommés améliorent la lisibilité, en particulier pour les méthodes ayant plusieurs paramètres du même type ou des indicateurs (flags) booléens.
Essayez vous-même
using System;
using Reports;
class Program
{
public static void Main(string[] args)
{
// Lire les trois titres de rapport
string title1 = Console.ReadLine();
string title2 = Console.ReadLine();
string title3 = Console.ReadLine();
// Créer une instance de ReportGenerator
ReportGenerator generator = new ReportGenerator();
// TODO: Générer le premier rapport - utiliser uniquement le titre (tous les paramètres par défaut s'appliquent)
// TODO: Générer le deuxième rapport - utiliser le titre avec includeSummary: true et maxPages: 25
// (ignorer author et includeHeader, en conservant leurs valeurs par défaut)
// TODO: Générer le troisième rapport - utiliser le titre avec author: "Admin", includeHeader: false, et includeSummary: true
// (conserver la valeur par défaut de maxPages)
// Afficher le résultat de chaque rapport
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur