Це в значній мірі охоплене іншими відповідями, але "це вираз" насправді не пояснює, чому це так корисно ...
Такими мовами, як C ++ та C #, ви можете визначати локальні поля для читання лише в межах методу, використовуючи їх. Це неможливо із звичайним оператором if / then, оскільки значення поля, яке читається тільки для цього, повинно бути присвоєне в цьому одному операторі:
readonly int speed = (shiftKeyDown) ? 10 : 1;
не те саме, що:
readonly int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a readonly
else
speed = 1; // error
Аналогічним чином можна вбудувати третинний вираз в інший код. Окрім того, щоб зробити вихідний код більш компактним (а в деяких випадках і більш читабельним у результаті), він також може зробити згенерований машинний код більш компактним та ефективним:
MoveCar((shiftKeyDown) ? 10 : 1);
... може генерувати менше коду, ніж двічі викликати той самий метод:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
Звичайно, це також більш зручна і лаконічна форма (менше набору тексту, менше повторень і може зменшити ймовірність помилок, якщо вам доведеться дублювати шматки коду в if / else). У чистих випадках «загальної моделі», таких як:
object thing = (reference == null) ? null : reference.Thing;
... це просто швидше читати / розбирати / розуміти (як тільки ви звикли до цього), ніж довговічне, якщо / ще еквівалент, тож це може допомогти вам швидше "виправити" код.
Звичайно, те, що це корисно , не означає, що це найкраще використовувати у кожному випадку. Я б радив використовувати його лише для коротких бітів коду, де значення зрозуміле (або зроблене більш зрозумілим), використовуючи ?:
- якщо ви використовуєте його в більш складному коді, або гніздових потрійних операторів один у одного, це може зробити код жахливо важким для читання .