Une méthode peut aussi renvoyer une valeur, par exemple un calcul. C’est souvent d’ailleurs son utilité première.
On pourrait imaginer par exemple une méthode qui calcule la longueur de l’hypoténuse à partir des 2 côtés d’un triangle. Sachant que a² + b² = c², nous pouvons imaginer une méthode qui prend en paramètres la longueur des 2 cotés, fait la somme de leur carrés et renvoie la racine carré du résultat. C’est ce que fait la méthode suivante :
Code : C# | static double LongueurHypotenuse(double a, double b)
{
double sommeDesCarres = a * a + b * b;
double resultat = Math.Sqrt(sommeDesCarres);
return resultat;
}
|
Continuons à ignorer le mot clé
static. Vous aurez remarqué que la signature de la méthode commence par le mot clé
double, qui indique que la méthode va nous renvoyer une valeur du type double. Comme on l’a vu,
double a et
double b sont deux paramètres de la méthode et sont du type
double.
La méthode
Math.Sqrt est une méthode du framework .NET, au même titre que la méthode
Console.WriteLine, qui permet de renvoyer la racine carrée d’un nombre. Elle prend en paramètre un double et nous retourne une valeur de type double également qui correspond à la racine carrée du paramètre. C’est tout naturellement que nous stockons ce résultat dans une variable grâce à l’opérateur d’affectation « = ».
À la fin de la méthode, le mot clé
return indique que la méthode renvoie la valeur à la méthode qui l’a appelée. Ici, nous renvoyons le résultat.
Cette méthode pourra s’utiliser ainsi :
Code : C# | static void Main(string[] args)
{
double valeur = LongueurHypotenuse(1, 3);
Console.WriteLine(valeur);
valeur = LongueurHypotenuse(10, 10);
Console.WriteLine(valeur);
}
|
Comme précédemment, nous utilisons une variable pour stocker le résultat de l’exécution de la méthode.
Ce qui produira comme résultat :
À noter qu’il est également possible de se passer d’une variable intermédiaire pour stocker le résultat. Ainsi, nous pourrons par exemple faire :
Code : C# | Console.WriteLine("Le résultat est : " + LongueurHypotenuse(1, 3));
|
Avec cette écriture le résultat renvoyé par la méthode
LongueurHypotenuse est directement concaténé à la chaine "Le résultat est : " et est passé en paramètre à la méthode
Console.WriteLine.
Remarquez qu’on a fait l’opération a*a pour mettre « a » au carré. On aurait également pu faire
Math.Pow(a, 2) qui permet de faire la même chose, la différence est que
Pow permet de mettre à la puissance que l’on souhaite. Ainsi,
Math.Pow(a, 3) permet de mettre « a » au cube.
Il faut savoir que le mot clé
return peut apparaitre à n’importe quel endroit de la méthode. Il interrompt alors l’exécution de celle-ci et renvoie la valeur passée. Ce mot-clé est obligatoire, sans cela la méthode ne compilera pas.
Il est également primordial que tous les chemins possibles d’une méthode renvoient quelque chose. Les chemins sont déterminés par les instructions conditionnelles que nous avons vues précédemment.
Ainsi, l’exemple suivant est correct :
Code : C# | static string Conjugaison(string genre)
{
if (genre == "homme")
return "é";
else
return "ée";
}
|
car peu importe la valeur de la variable « genre », la méthode renverra une chaine.
Alors que celui-ci :
Code : C# | static string Conjugaison(string genre)
{
if (genre == "homme")
return "é";
else
{
if (genre == "femme")
return "ée";
}
}
|
est incorrect. En effet, que renvoie la méthode si la variable « genre » contient autre chose que homme ou femme ?
En général, Visual C# express nous indiquera qu’il détecte un problème avec une erreur de compilation.
Nous pourrons corriger ceci avec par exemple :
Code : C# | static string Conjugaison(string genre)
{
if (genre == "homme")
return "é";
else
{
if (genre == "femme")
return "ée";
}
return "";
}
|
À noter que "" correspond à une chaine vide et peut également s’écrire : string.Empty.
Nous avons vu dans le chapitre précédent qu’il était possible de créer des méthodes qui ne retournent rien. Dans ce cas, on peut utiliser le mot clé
return sans valeur qui le suit pour stopper l’exécution de la méthode. Par exemple :
Code : C# | static void Bonjour(string prenom)
{
if (prenom == "inconnu")
return;
Console.WriteLine("Bonjour " + prenom);
}
|
Ainsi, si la variable « prenom » vaut « inconnu », alors nous quittons la méthode
Bonjour et l’instruction
Console.WriteLine ne sera pas exécutée.