Ceci est à peu près couvert par les autres réponses, mais "c'est une expression" n'explique pas vraiment pourquoi c'est si utile ...
Dans des langages comme C ++ et C #, vous pouvez définir des champs en lecture seule locaux (dans un corps de méthode) en les utilisant. Cela n'est pas possible avec une instruction if / then conventionnelle car la valeur d'un champ en lecture seule doit être affectée dans cette instruction unique:
readonly int speed = (shiftKeyDown) ? 10 : 1;
n'est pas la même chose que:
readonly int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a readonly
else
speed = 1; // error
De la même manière, vous pouvez incorporer une expression tertiaire dans un autre code. En plus de rendre le code source plus compact (et dans certains cas plus lisible en conséquence), il peut également rendre le code machine généré plus compact et efficace:
MoveCar((shiftKeyDown) ? 10 : 1);
... peut générer moins de code que d'avoir à appeler la même méthode deux fois:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
Bien sûr, c'est aussi une forme plus pratique et concise (moins de frappe, moins de répétition et peut réduire le risque d'erreurs si vous devez dupliquer des morceaux de code dans un if / else). Dans des cas de "modèle commun" propres comme celui-ci:
object thing = (reference == null) ? null : reference.Thing;
... il est tout simplement plus rapide à lire / analyser / comprendre (une fois que vous y êtes habitué) que l'équivalent si / else long et long, donc il peut vous aider à «grok» le code plus rapidement.
Bien sûr, ce n'est pas parce que c'est utile que c'est la meilleure chose à utiliser dans tous les cas. Je conseillerais de ne l'utiliser que pour de courts morceaux de code où la signification est claire (ou rendue plus claire) en utilisant ?:
- si vous l'utilisez dans un code plus complexe, ou si vous imbriquez des opérateurs ternaires les uns dans les autres, cela peut rendre le code horriblement difficile à lire .