CodeGym /Cours /C# SELF /L’opérateur ternaire en C# : conditions concises et subti...

L’opérateur ternaire en C# : conditions concises et subtilités

C# SELF
Niveau 3, Leçon 5
Disponible

1. Expressions vs Instructions

En C#, toutes les instructions se divisent en deux catégories : instructions (Statement) et expressions (Expression). D’habitude, on dit qu’une instruction s’exécute, alors qu’une expression se calcule. Mais c’est pas le plus important.

La vraie différence : une expression a un résultat de calcul. Ce résultat a un type, et tu peux l’assigner à une variable ou l’utiliser dans une autre expression.

Exemples :

Code Remarques
int x;
Instruction
(a < 10)
Expression, type bool
i++;
Expression, type identique à la variable i
x = 5;
Expression, type identique à la variable x

Qu’est-ce que ça nous apporte ?

Beaucoup d’instructions sont en fait des expressions (elles ont un résultat de calcul). Par exemple, ce code fonctionne :
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
Tu peux ignorer le résultat d’une expression si t’en as pas besoin :
Console.ReadLine();	// on ignore le résultat de la saisie

C’est pratique si l’expression fait autre chose d’utile en plus de renvoyer un résultat (genre afficher à l’écran ou lire une entrée).

2. L’opérateur ternaire

En C#, il y a un opérateur ternaire (ou triple) spécial. Il ressemble à une version raccourcie de if–else :


Condition ? Expression1 : Expression2;
Syntaxe de l’opérateur ternaire

Si Condition est vraie, Expression1 est calculée, sinon — Expression2. Après la condition, on met ?, et les deux expressions sont séparées par :.

La grosse différence avec if-else : l’opérateur ternaire est une expression, tu peux donc assigner son résultat à une variable ou l’utiliser ailleurs.

Par exemple, calculons le minimum de deux nombres :

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

Ou assigner à une variable différentes valeurs selon la condition :


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
Le classique if-else

Pareil avec l’opérateur ternaire :


int age = 25;
int money = age > 30 ? 100 : 50;
Opérateur ternaire — version compacte

Quoi utiliser : if-else ou l’opérateur ternaire ? Niveau perf, c’est pareil, mais le ternaire est top pour les conditions courtes. Si ça tient pas sur une ligne — mieux vaut un if-else pour la lisibilité.

3. Subtilités d’utilisation

Types des valeurs
Les deux branches de l’opérateur ternaire (<valeur_si_vrai> et <valeur_si_faux>) doivent être du même type ou compatibles (genre deux string ou deux int).

Ça marche :

int a = 10, b = 20;
int max = (a > b) ? a : b; // les deux branches — int

Erreur de compilation :

int a = 10, b = 20;
// string et int sont incompatibles
string result = (a > b) ? "plus grand" : 0; // Erreur de compilation

Version correcte :

int a = 10, b = 20;
string result = (a > b) ? "plus grand" : "plus petit ou égal";

Exemple : manipuler des nombres

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Intégrer l’opérateur ternaire dans une appli

Écrivons une petite appli de dialogue : en plus du message de bienvenue, le programme dira à l’utilisateur quel âge il aura l’an prochain, et s’il sera majeur ou pas.

Console.Write("Tape ton nom : ");
string name = Console.ReadLine();

Console.Write("Tape ton âge : ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "majeur" : "mineur";

Console.WriteLine($"Salut, {name} ! L’an prochain tu auras {nextYear} ans. Tu seras {status}.");

Explications :

  • La variable status est calculée via l’opérateur ternaire : si l’âge dans un an est au moins 18, l’utilisateur sera majeur (ou le restera).
  • L’opérateur ternaire s’intègre facilement dans les chaînes (par exemple avec l’interpolation $"").

5. Ternaires imbriqués — attention !

On peut imbriquer des opérateurs ternaires (dans chaque branche, il peut y avoir un autre ternaire). Mais… ça fait vite mal à la tête, surtout pour celui qui relira le code après toi (même si c’est toi dans 2 jours).

Exemple : déterminer la catégorie selon l’âge

string category = (age < 7) ? "pré-scolaire" :
                  (age < 18) ? "scolaire" :
                  (age < 65) ? "adulte" : "retraité";

Tableau de décision :

Âge Condition Résultat
< 7 age < 7 pré-scolaire
7–17 age < 18 scolaire
18–64 age < 65 adulte
65 et plus sinon retraité

Ce code reste lisible, mais si la logique devient plus complexe — mieux vaut utiliser if-else if-else.

6. Astuce : opérateur ternaire et type bool

Parfois, on voit ce genre de code :

bool adulte = (age >= 18) ? true : false;

Mais c’est inutile. L’expression (age >= 18) renvoie déjà un bool. Donc tu peux juste écrire :

bool adulte = (age >= 18);
2
Mission
C# SELF, niveau 3, leçon 5
Bloqué
Utilisation simple de l'opérateur ternaire
Utilisation simple de l'opérateur ternaire
2
Mission
C# SELF, niveau 3, leçon 5
Bloqué
Catégorie d'âge
Catégorie d'âge
1
Étude/Quiz
Opérateur conditionnel, niveau 3, leçon 5
Indisponible
Opérateur conditionnel
Opérateur conditionnel
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION