Чем отличаются условный оператор от тернарного?

Изучала тему знака вопроса в языках. Нашла такой вопрос на стаке: Что означает знак вопроса в C#?

В комменатариях к этому вопросу были сообщения:

- ну это же тернарный оператор :'( – Алексей Шиманский 9 июл '16 в 14:25

- Тернарным называется любой оператор с тремя операндами. Оператор, о котором идёт речь, называется «условный оператор». – VladD 9 июл '16 в 17:58

И я запуталась. Везде в интернете подобная конструкция называется тернарником

Объясните пожалуйста, почему указанный в самом начале оператор - условный, а не тернарный? Каково опредедление условного оператора? И тогда в чём его отличие от тернарного? И каково реальное определение тернарного и как он тогда выглядит?


Ответы (2 шт):

Автор решения: MBo

Это тернарный условный оператор. Не надо противопоставлять - у данного оператора два свойства - он и условный, и тернарный.

По функциональности оператор ? условный (как if, switch)

По количеству операндов - тернарный (бывают ещё бинарные и унарные)


Ваше предположение оператор - условный, а не тернарный не имеет под собой оснований. VladD не утверждал, что оператор не является тернарным, он только уточнил, что это не единственная его характеристика (т.е. могут существовать и другие тернарные операторы).

Если на пальцах - есть несколько видов овощей, один из них - баклажан - синий. Он и овощ (главное свойство) и синий (вторичное). Синие плоды редки, поэтому иногда можно сказать "синенький" - и будет понятно.

→ Ссылка
Автор решения: ТарасПрогер

Тернарный оператор так назвали потому, что он работает с тремя операндами. Тернарный оператор условный, так как выполнение программы/значение переменной/значение возврата зависит от условия как и у if/switch даже while/for. Условных операторов несколько. Тернарный не исключение, так как он базируется на логическом выражении. Условный оператор - некая абстракция.

Оператор ?: предоставляет сокращенный способ (альтернативу) ветвления if/else. Его стоит использовать когда от условия зависит значение переменной. Например int x = (var > 2) ? 1 : 0 . Проверяем, var больше чем 2? Тогда присваиваем переменной значение после знака вопроса(1) иначе - 0. Еще пример - return (guessed == ok) ? true : false; Но не стоит ним употреблять так как он может сделать код не понятным.

Например, с помощю тернарного оператора можно присвоить значение переменной с атрибутом const, что не сделаешь через обычный if/else.

→ Ссылка