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 à la position. Cela rend les appels de méthode plus clairs et vous permet de transmettre les 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 sont particulièrement utiles lorsqu’ils sont associés à des paramètres facultatifs. Au lieu de fournir toutes les valeurs facultatives précédentes, vous pouvez accéder 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}");
}
// Ignorez port et useSSL, spécifiez 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 comportant plusieurs paramètres du même type ou des indicateurs booléens dont la signification n’est pas évidente à partir de la valeur seule.
Défi
FacileConstruisons un générateur de rapports qui tire parti des arguments nommés afin de rendre les appels de méthode parfaitement clairs. Lorsque les méthodes possèdent plusieurs paramètres — en particulier lorsqu’ils sont du même type ou qu’il s’agit d’indicateurs booléens — les arguments nommés rendent votre code explicite par lui-même.
Vous organiserez votre code sur deux fichiers :
ReportGenerator.cs: créez une classeReportGeneratordans l’espace de nomsReports, avec une méthode qui possède plusieurs paramètres facultatifs :GenerateReport(string title, string author = "Anonymous", bool includeHeader = true, bool includeSummary = false, int maxPages = 10)- Cette méthode doit renvoyer 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 ignorant les paramètres facultatifs dont vous n’avez pas besoin et en spécifiant uniquement ceux qui sont importants 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 (toutes les valeurs par défaut s’appliquent)
- Deuxième rapport : utilisez le titre avec
includeSummary: trueetmaxPages: 25(ignorez author et includeHeader, en conservant leurs valeurs par défaut) - Troisième rapport : utilisez le titre avec
author: "Admin",includeHeader: falseetincludeSummary: 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 doit ê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 simplement pour modifier includeSummary. Cela rend vos appels de méthode beaucoup plus lisibles et explicites quant à leur intention !
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 UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne