Это в значительной степени покрыто другими ответами, но "это выражение" не объясняет, почему это так полезно ...
В таких языках, как 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;
... просто читать / анализировать / понимать (если вы привыкли к нему) просто быстрее, чем многословный эквивалент if / else, так что это может помочь вам быстрее «прогнать» код.
Конечно, только то, что он полезен , не означает, что лучше всего использовать вкаждый случай.Я бы посоветовал использовать его только для коротких фрагментов кода, где смысл ясен (или сделан более понятным) с помощью ?:
- если вы используете его в более сложном коде или вкладываете тернарные операторы друг в друга, это может ужасно сделать кодтрудно читать.