Aller au contenu

Méthodes avec paramètres out

"Quand une méthode veut te parler, laisse-la t’écrire dans ta variable."

Un développeur perspicace

Qu’est-ce qu’un paramètre out ?

Le mot-clé out permet à une méthode de renvoyer plusieurs valeurs via ses paramètres.
Contrairement à un retour classique avec return, une méthode peut modifier une variable passée en out et ainsi renvoyer un résultat par référence.

💡 On parle souvent de “paramètre de sortie”.


Structure générale

static void NomMethode(out <Type> nomVariable)
{
    // traitement
    nomVariable = valeur; // obligatoire avant la fin
}

Utilisation :

<type> maVariable;
NomMethode(out maVariable);

Exemple simple

static void CalculerCarre(out int resultat, int nombre)
{
    resultat = nombre * nombre;
}

Utilisation :

int carre;
CalculerCarre(out carre, 5);
Console.WriteLine($"Le carré est : {carre}");  // Le carré est : 25

🧠 Explication

  • Le mot-clé out indique que la méthode va assigner une valeur à la variable passée.
  • La variable doit être initialisée dans la méthode, même si elle ne l’était pas avant l’appel.
  • On peut donc retourner plusieurs valeurs sans créer de tuple ni d’objet.

Exemple avec plusieurs out

static void CalculerOperations(int a, int b, out int somme, out int produit)
{
    somme = a + b;
    produit = a * b;
}

Utilisation :

int s, p;
CalculerOperations(3, 5, out s, out p);
Console.WriteLine($"Somme : {s}, Produit : {p}");
📤 Résultat :
Somme : 8, Produit : 15


⚡ Simplification avec out var (C# 7+)

Depuis C# 7, on peut déclarer la variable directement dans l’appel :

CalculerOperations(3, 5, out int somme, out int produit);
Console.WriteLine($"Somme : {somme}, Produit : {produit}");

💡 Plus besoin de déclarer int somme, produit; avant l’appel.
Le compilateur s’en charge automatiquement.


⚖️ Comparaison avec ref

Caractéristique out ref
Doit être initialisé avant l’appel ❌ Non ✅ Oui
Doit être assigné dans la méthode ✅ Oui ❌ Non obligatoire
Utilisation typique Renvoyer plusieurs résultats Modifier une valeur existante
Nécessite mot-clé à l’appel ✅ Oui (out) ✅ Oui (ref)

🧩 Exemple concret : conversion sécurisée

L’exemple le plus courant est int.TryParse() :

if (int.TryParse("42", out int valeur))
{
    Console.WriteLine($"Conversion réussie : {valeur}");
}
else
{
    Console.WriteLine("Erreur de conversion");
}

📤 Résultat :

Conversion réussie : 42

🔍 Ici, TryParse renvoie un bool indiquant si la conversion a réussi,
et assigne la valeur convertie dans la variable valeur passée en out.


⚠️ Erreurs fréquentes

  • ❌ Oublier d’écrire out à l’appel de la méthode
  • ❌ Ne pas assigner la variable out dans la méthode (erreur de compilation)
  • ❌ Essayer d’utiliser la variable out avant qu’elle ne soit assignée
  • ❌ Confondre out et ref : le premier crée la valeur, le second modifie une valeur existante

💬 Exemple complet

static bool TrouverMax(int a, int b, out int max)
{
    if (a > b)
    {
        max = a;
        return true;
    }
    else if (b > a)
    {
        max = b;
        return true;
    }
    else
    {
        max = a;
        return false;
    }
}

static void Main()
{
    if (TrouverMax(10, 5, out int resultat))
        Console.WriteLine($"Le plus grand est {resultat}");
    else
        Console.WriteLine("Les deux nombres sont égaux");
}

📤 Résultat :

Le plus grand est 10


🧩 Quiz – Le mot-clé out

Testez vos connaissances ! 📝 Clique sur chaque question pour découvrir la réponse.

1️⃣ Que fait le mot-clé out ?
A. Passe un paramètre par valeur
B. Passe un paramètre par référence pour le modifier
C. Passe un paramètre en lecture seule
D. Crée une copie temporaire
E. Supprime le typage
✅ Afficher la réponse
Réponse B : out permet à une méthode de modifier la variable passée par référence.

2️⃣ Quelle différence entre out et ref ?
A. out ne nécessite pas d’initialisation avant l’appel
B. ref oblige à initialiser avant
C. out doit être assigné dans la méthode
D. Toutes les réponses ci-dessus
✅ Afficher la réponse
Réponse D : Toutes les affirmations sont vraies.

3️⃣ Quelle est la bonne syntaxe ?
A. Calculer(out int x, 5);
B. Calculer(int out x, 5);
C. Calculer(ref int x, 5);
D. Calculer(5, x out);
✅ Afficher la réponse
Réponse A : out se place avant le nom de la variable dans l’appel.

4️⃣ Peut-on combiner return et out ?
A. Non, c’est interdit
B. Oui, pour renvoyer un booléen et un résultat complémentaire
C. Oui, mais seulement avec ref
D. Non, car out remplace return
✅ Afficher la réponse
Réponse B : On peut utiliser return et out ensemble (ex : TryParse()).

5️⃣ Depuis quelle version de C# peut-on écrire out var directement dans l’appel ?
A. C# 5
B. C# 6
C. C# 7
D. C# 8
E. C# 9
✅ Afficher la réponse
Réponse C : La déclaration inline out var est possible depuis C# 7.


Navigation

Introduction Sans paramètre Avec paramètre Avec retour Par référence / Out Retour multiple (out) Retour multiple (tuples) Travail pratique


Pour aller plus loin