Exercice – Valeurs de retour et paramètres des méthodes
- 18 minutes
Dans l’unité précédente, vous avez utilisé un scénario de codage de type « lancer de dé » pour illustrer la différence entre les méthodes avec état (instance) et sans état (statique). Ce même scénario peut vous aider à comprendre d’autres concepts importants concernant les méthodes d’appel. Par exemple:
- la gestion de la valeur de retour d’une méthode ;
- paramètres de méthode et passage d’arguments vers une méthode.
- le choix d’une version surchargée d’une méthode.
Valeurs de retour
Certaines méthodes sont conçues pour remplir leur fonction et se terminer « silencieusement ». En d’autres termes, elles ne retournent pas de valeur quand elles se terminent. Elles sont appelées méthodes void.
D’autres méthodes sont conçues pour retourner une valeur après achèvement. La valeur de retour est généralement le résultat d’une opération. Une valeur de retour est la principale manière dont dispose une méthode pour communiquer avec le code qui appelle cette méthode.
Vous avez vu que la méthode Random.Next()
retourne un type int
contenant la valeur du nombre généré de manière aléatoire. Toutefois, une méthode peut être conçue pour retourner n’importe quel type de données, même une autre classe. Par exemple, la classe String
a certaines méthodes qui retournent une chaîne, d’autres qui retournent un entier et d’autres qui retournent un booléen.
Lorsque vous appelez une méthode qui retourne une valeur, vous affectez souvent la valeur de retour à une variable. De cette façon, vous pouvez utiliser la valeur ultérieurement dans votre code. Dans le scénario de lancer de dé, vous avez affecté la valeur de retour de Random.Next()
à la variable roll
:
int roll = dice.Next(1, 7);
Dans certains cas, vous pouvez utiliser la valeur de retour directement, sans l’attribuer à une variable. Par exemple, vous pouvez afficher la valeur de retour dans la console comme suit :
Console.WriteLine(dice.Next(1, 7));
Même si une méthode retourne une valeur, il est possible d’appeler la méthode sans utiliser la valeur de retour. Par exemple, vous pouvez ignorer la valeur de retour en appelant la méthode comme suit :
dice.Next(1, 7);
Toutefois, ignorer la valeur de retour serait inutile. La raison pour laquelle vous appelez la méthode Next()
est que vous pouvez récupérer la valeur aléatoire suivante.
Paramètres et arguments de méthode dans l’instruction appelante
Lorsque vous appelez une méthode, vous pouvez transmettre des valeurs que la méthode utilisera pour terminer sa tâche. Ces valeurs sont appelées arguments. La méthode utilise les arguments pour affecter des valeurs aux paramètres définis dans la signature de la méthode. Une méthode peut nécessiter un ou plusieurs paramètres pour accomplir sa tâche, ou aucune tâche.
Remarque
Souvent, les termes « paramètre » et « argument » sont utilisés de façon interchangeable. Toutefois, « paramètre » fait référence à la variable utilisée au sein de la méthode. Un « argument » est la valeur transmise quand la méthode est appelée.
La plupart des méthodes sont conçues pour accepter un ou plusieurs paramètres. Les paramètres peuvent être utilisés pour configurer la façon dont la méthode effectue son travail ou ils peuvent être utilisés directement. Par exemple, la méthode Random.Next()
utilise des paramètres pour configurer les limites supérieure et inférieure de la valeur de retour. Toutefois, Console.WriteLine()
utilise le paramètre directement en affichant la valeur dans la console.
Les méthodes utilisent une signature de méthode pour définir le nombre de paramètres que la méthode acceptera, ainsi que le type de données de chaque paramètre. L’instruction de codage qui appelle la méthode doit respecter les conditions spécifiées par la signature de méthode. Certaines méthodes fournissent des options pour le nombre et le type de paramètres que la méthode accepte.
Quand un appelant appelle la méthode, il fournit des valeurs réelles, appelées « arguments », pour chaque paramètre. Les arguments doivent être compatibles avec le type de paramètre. Toutefois, le nom de l’argument, s’il est utilisé dans le code appelant, n’a pas besoin d’être identique au nom du paramètre défini dans la méthode.
Considérez le code suivant :
Random dice = new Random();
int roll = dice.Next(1, 7);
Console.WriteLine(roll);
La première ligne de code crée une instance de la classe Random
nommée dice
. La deuxième ligne de code utilise la méthode dice.Next(1, 7)
pour affecter une valeur aléatoire à un entier nommé roll
. Notez que l’instruction appelante fournit deux arguments séparés par un symbole ,
. La méthode Next()
comprend une signature de méthode qui accepte deux paramètres de type int
. Ces paramètres sont utilisés pour configurer les limites inférieures et supérieures du nombre aléatoire retourné. La dernière ligne de code utilise la méthode Console.WriteLine()
pour afficher la valeur de roll
dans la console.
Les arguments passés à une méthode doivent être le même type de données que les paramètres correspondants définis par la méthode. Si vous tentez de passer un argument mal typé à une méthode, le compilateur C# intercepte votre erreur et vous force à mettre à jour votre instruction appelante avant que votre code ne compile et ne s’exécute. Le contrôle de type est l’un des moyens que C# et .NET utilisent pour empêcher les utilisateurs finaux de rencontrer des erreurs au moment de l’exécution.
Remarque
Les paramètres sont souvent utilisés, mais toutes les méthodes ne nécessitent pas des paramètres pour réaliser leur tâche. Par exemple, la classe Console
inclut une méthode Console.Clear()
qui n’utilise pas de paramètres. Étant donné que cette méthode est utilisée pour effacer toutes les informations affichées dans la console, elle n’a pas besoin de paramètres pour terminer sa tâche.
Méthodes surchargées
De nombreuses méthodes de la bibliothèque de classes .NET ont des signatures de méthodes surchargées. Entre autres choses, cela vous permet d’appeler la méthode avec ou sans arguments spécifiés dans l’instruction appelante.
Une méthode surchargée est définie avec plusieurs signatures de méthode. Les méthodes surchargées fournissent différentes façons d’appeler la méthode ou fournissent différents types de données.
Dans certains cas, les versions surchargées d’une méthode sont utilisées pour définir un paramètre à l’aide de différents types de données. Par exemple, la méthode Console.WriteLine()
a 19 versions surchargées différentes. La plupart de ces surcharges permettent à la méthode d’accepter différents types, puis d’écrire les informations spécifiées dans la console. Considérez le code suivant :
int number = 7;
string text = "seven";
Console.WriteLine(number);
Console.WriteLine();
Console.WriteLine(text);
Dans cet exemple, vous appelez trois versions surchargées distinctes de la méthode WriteLine()
.
- La première méthode
WriteLine()
utilise une signature de méthode qui définit un paramètreint
. - La deuxième méthode
WriteLine()
utilise une signature de méthode qui définit zéro paramètre. - La troisième méthode
WriteLine()
utilise une signature de méthode qui définit un paramètrestring
.
Dans d’autres cas, les versions surchargées d’une méthode définissent un nombre différent de paramètres. Les autres paramètres peuvent être utilisés pour fournir plus de contrôle sur le résultat souhaité. Par exemple, la méthode Random.Next()
a des versions surchargées qui vous permettent de définir différents niveaux de contrainte sur le nombre généré de manière aléatoire.
L’exercice suivant appelle la méthode Random.Next()
pour générer des valeurs entières aléatoires avec différents niveaux de contrainte :
Assurez-vous d’avoir un fichier Program.cs vide ouvert dans Visual Studio Code.
Si nécessaire, ouvrez Visual Studio Code, puis effectuez les étapes suivantes pour préparer un fichier Program.cs dans l’Éditeur :
Dans le menu Fichier , sélectionnez Ouvrir le dossier.
Utilisez la boîte de dialogue Ouvrir le dossier pour accéder au dossier CsharpProjects et l’ouvrir.
Dans la vue Explorateur de Visual Studio Code, sélectionnez Program.cs.
Dans le menu Sélection de Visual Studio Code, sélectionnez Sélectionner tout, puis appuyez sur la touche Supprimer.
Pour examiner les versions surchargées de la méthode
Random.Next()
, entrez le code suivant :Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");
Dans le menu Fichier Visual Studio Code, cliquez sur Enregistrer.
Dans l’affichage EXPLORATEUR, pour ouvrir un terminal à l’emplacement de votre dossier TestProject, cliquez avec le bouton droit sur TestProject, puis sélectionnez Ouvrir dans le terminal intégré.
Assurez-vous que le chemin de dossier affiché dans l’invite de commandes pointe vers le dossier contenant votre fichier Program.cs.
À l’invite de commande du terminal, pour exécuter votre code, tapez dotnet run, puis appuyez sur Entrée.
Notez que le résultat est similaire à la sortie suivante :
First roll: 342585470 Second roll: 43 Third roll: 89
Les nombres générés sont aléatoires et vous obtiendrez donc des résultats différents. Toutefois, cet exemple illustre la plage de résultats que vous pouvez voir.
Prenez le temps d’examiner le code.
La première version de la méthode
Next()
ne définit pas de limite supérieure et inférieure : la méthode renverra donc des valeurs allant de0
à2,147,483,647
, ce qui correspond à la valeur maximale qu’un typeint
peut stocker.La deuxième version de la méthode
Next()
spécifie la valeur maximale comme limite supérieure : dans ce cas, vous pouvez donc attendre une valeur aléatoire comprise entre0
et100
.La troisième version de la méthode
Next()
spécifie à la fois la valeur minimale et la valeur maximale : dans ce cas, vous pouvez donc attendre une valeur aléatoire comprise entre50
et100
.Fermez le panneau du Terminal.
Vous avez déjà examiné plusieurs sujets dans cette unité. Voici une courte liste de ce que vous avez couvert :
- Vous avez examiné comment utiliser la valeur de retour d’une méthode (le cas échéant).
- Vous avez vu comment une méthode peut utiliser des paramètres définis comme des types de données spécifiques.
- Vous avez examiné les versions surchargées de certaines méthodes qui incluent différents paramètres ou types de paramètres.
Utiliser IntelliSense
Visual Studio Code inclut des fonctionnalités IntelliSense qui sont optimisées par un service de langage. Par exemple, le service de langage C# fournit des saisies de code intelligentes basées sur la sémantique du langage et une analyse de votre code source. Dans cette section, vous allez utiliser IntelliSense pour vous aider à implémenter la méthode Random.Next()
.
Comme IntelliSense est exposé dans l’éditeur de code, vous pouvez en apprendre beaucoup sur une méthode sans quitter l’environnement de codage. IntelliSense fournit des indications et des informations de référence dans une fenêtre contextuelle sous l’emplacement du curseur à mesure que vous entrez votre code. Quand vous tapez du code, le contenu de la fenêtre contextuelle d’IntelliSense change en fonction du contexte.
Par exemple, à mesure que vous tapez lentement le mot dice
, IntelliSense vous montre tous les mots clés C#, tous les identificateurs (plus exactement, les noms des variables du code) et toutes les classes de la bibliothèque de classes .NET qui correspondent aux lettres saisies. Vous pouvez utiliser les fonctionnalités d’autocomplétion de l’éditeur de code pour finir de taper le mot qui a la meilleure correspondance dans la fenêtre contextuelle d’IntelliSense. Essayez.
Vérifiez que vous avez votre fichier Program.cs ouvert dans Visual Studio Code.
Votre application doit contenir le code suivant :
Random dice = new Random(); int roll1 = dice.Next(); int roll2 = dice.Next(101); int roll3 = dice.Next(50, 101); Console.WriteLine($"First roll: {roll1}"); Console.WriteLine($"Second roll: {roll2}"); Console.WriteLine($"Third roll: {roll3}");
En bas de votre fichier de code, pour tester IntelliSense, tapez lentement les lettres
d
,i
etc
.Notez la fenêtre contextuelle IntelliSense qui apparaît lorsque vous commencez à taper.
Quand IntelliSense apparaît, une liste de suggestions doit s’afficher. Une fois que vous avez tapé
dic
, l’identificateurdice
doit se trouver en haut de la liste.Appuyez sur la touche Tab du clavier.
Notez que le mot entier
dice
est terminé dans l’éditeur. Vous pouvez utiliser les touches de direction haut et bas pour modifier la sélection avant d’appuyer sur la touche Tab.Remarque
Si la fenêtre IntelliSense disparaît, vous pouvez sélectionner la touche
backspace
du clavier, puis retaper le dernier symbole pour rouvrir IntelliSense.Pour spécifier l’opérateur d’accès membre, entrez un caractère
.
.Notez que la fenêtre contextuelle IntelliSense réapparaît quand vous entrez
.
et affiche une liste non filtrée de toutes les méthodes (et d’autres membres de la classe) disponibles.Entrer N
La liste est filtrée et le mot
Next
doit être la première sélection.Pour effectuer la saisie semi-automatique du mot entier, appuyez sur la touche Tab.
Pour spécifier l’opérateur d’appel de méthode, entrez (
Notez que la parenthèse fermante est automatiquement ajoutée pour vous.
L’opérateur d’appel de méthode est l’ensemble de parenthèses situé à droite du nom de la méthode. Cette partie de l’instruction appelante est l’emplacement où vous spécifiez les arguments qui seront passés à la méthode. L’opérateur d’appel de méthode est requis lors de l’appel de la méthode.
Notez que la fenêtre contextuelle IntelliSense affiche désormais des informations détaillées sur la méthode
Random.Next()
.Prenez quelques instants pour examiner la fenêtre contextuelle IntelliSense de la méthode
Random.Next()
.Remarque
Si la fenêtre contextuelle IntelliSense s’est fermée avant que vous ayez eu l’occasion de l’examiner, supprimez l’opérateur d’appel
()
et entrez ( pour afficher la fenêtre contextuelle IntelliSense.Notez que la fenêtre contextuelle comprend trois sections, une à gauche et deux à droite.
Sur le côté droit, vous devriez voir
int Random.Next()
dans la section supérieure etReturns a non-negative random integer.
dans la section inférieure.int
définit le type de retour pour la méthode. En d’autres termes, quand vous exécutez cette version de la méthode, elle retourne une valeur de typeint
.Sur le côté gauche de la fenêtre contextuelle IntelliSense, elle affiche
1/3
.1/3
indique que vous examinez la première des trois signatures de méthode pour la méthodeNext()
. Notez que cette version de la signature de méthode permet à la méthode de fonctionner sans paramètres (aucun argument passé à la méthode dans l’instruction appelante).Notez également la présence d’une petite flèche au-dessus et en dessous de
1/3
.Pour examiner la deuxième version surchargée de la méthode, appuyez sur la touche de direction Bas du clavier.
Notez que vous pouvez utiliser les touches de direction Haut et Bas pour naviguer entre les différentes versions surchargées. Dans ce cas, vous voyez les indications
1/3
,2/3
et3/3
s’afficher sur le côté gauche de la fenêtre contextuelle IntelliSense, ainsi que des explications utiles à droite.Prenez quelques instants pour examiner chacune des versions surchargées de la méthode
Random.Next()
.La deuxième version surchargée de la méthode
2/3
vous informe que la méthodeNext()
peut accepter un paramètreint maxValue
. La description vous indique quemaxValue
est la limite supérieure exclusive pour le nombre que vous souhaitez que la méthodeNext()
génère. Le terme « exclusive » indique que le numéro de retour est inférieur à maxValue. Par conséquent, quand vous spécifiezdice.Next(1,7);
, la valeur maximale du lancer de dé est de 6. Notez que le message en bas de la section a été mis à jour vers :Returns a non-negative random integer that is less than the specified maximum.
La troisième version surchargée de la méthode
3/3
vous informe que la méthodeNext()
peut accepterint minValue
etint maxValue
comme paramètres. Le nouveau paramètre,minValue
, est une limite inférieure pour le nombre que vous souhaitez que la méthodeNext()
génère. Étant donné que la limite inférieure est inclusive plutôt qu’exclusive, la valeur de retour peut être égale àminValue
. Le message du bas stipule maintenant :Returns a random integer that is within a specified range.
Dans ce cas, IntelliSense fournit toutes les informations dont vous avez besoin pour sélectionner la surcharge appropriée, y compris une explication détaillée de
maxValue
etminValue
. Toutefois, vous pouvez rencontrer des situations où vous devez consulter la documentation de la méthode.
Utiliser learn.microsoft.com pour obtenir des informations sur les méthodes surchargées
La deuxième façon de découvrir plus d’informations sur les versions surchargées des méthodes est de consulter la documentation de la méthode. La documentation vous aide également à comprendre exactement ce à quoi chaque paramètre est destiné.
Pour commencer, ouvrez votre navigateur web et votre moteur de recherche préférés.
Effectuez une recherche pour C# Random.Next()
Votre recherche doit inclure le nom de la classe et le nom de la méthode. Vous pouvez également inclure le terme
C#
pour être sûr de ne pas obtenir accidentellement des résultats pour d’autres langages de programmation.Sélectionnez le premier résultat de recherche avec une URL qui commence par
https://learn.microsoft.com
.Un des premiers résultats de la recherche doit diriger vers une URL qui commence par
https://learn.microsoft.com
. Dans ce cas, le titre du lien doit apparaître sous la formeRandom.Next Method
.Voici le lien, pour le cas où vous rencontrez un problème pour le trouver avec un moteur de recherche :
Ouvrez le lien pour C# Random.Next().
Parcourez rapidement la documentation.
Faites défiler le contenu de la page pour voir les différents exemples de code. Notez que vous pouvez exécuter ces exemples dans la fenêtre du navigateur.
La documentation learn.microsoft.com suit un format standard pour chaque classe et chaque méthode de la bibliothèque de classes .NET.
En haut de la page web, recherchez la section intitulée Surcharges.
Notez que trois versions surchargées de la méthode sont répertoriées. Chaque version surchargée qui est répertoriée inclut un lien hypertexte vers un emplacement plus bas dans la page.
Pour accéder dans cette page à une description de la deuxième version surchargée, sélectionnez Next(Int32).
La documentation pour chaque version de la méthode comprend :
- Brève description de la fonctionnalité de la méthode
- Définition de la méthode
- Paramètres acceptés par la méthode
- Valeurs de retour
- Exceptions qui peuvent être levées
- Exemples de la méthode utilisée
- Remarques supplémentaires sur la méthode
Prenez quelques instants pour passer en revue la section Paramètres.
Dans la section Paramètres, vous pouvez lire que le paramètre
maxValue
est la « limite supérieure (exclusive) du nombre aléatoire à générer. » Une limite supérieure exclusive signifie que si vous voulez des nombres ne dépassant pas10
, vous devez passer la valeur11
.Vous pouvez également lire la ligne suivante : «
maxValue
doit être supérieur ou égal à 0 ». Que se passe-t-il si vous ignorez cette instruction ? Vous pouvez voir dans la section Exceptions que la méthode retourne une exceptionArgumentOutOfRangeException
quandmaxValue
est inférieur à 0.Remarque
Le contenu de learn.microsoft.com est la « source de référence » de la bibliothèque de classes .NET. Il est important de prendre le temps de lire la documentation pour comprendre comment une méthode donnée fonctionne.
Récapitulatif
- Les méthodes peuvent n’accepter aucun paramètre ou en accepter plusieurs, en fonction de la façon dont elles ont été conçues et implémentées. Quand vous passez plusieurs paramètres, vous les séparez par un symbole
,
. - Les méthodes peuvent retourner une valeur quand elles terminent leur tâche ou peuvent aussi ne rien retourner (void).
- Les méthodes surchargées prennent en charge plusieurs implémentations de la méthode, chacune avec une signature de méthode unique (le nombre de paramètres et le type de données de chaque paramètre).
- IntelliSense peut aider à écrire du code plus rapidement. Il fournit des informations de référence résumées sur les méthodes, leurs valeurs de retour, leurs versions surchargées et les types de leurs paramètres.
- Utilisez learn.microsoft.com comme « source de référence » quand vous voulez savoir comment fonctionnent des méthodes de la bibliothèque de classes .NET.