Чем отличаются условный оператор от тернарного?
Изучала тему знака вопроса в языках. Нашла такой вопрос на стаке: Что означает знак вопроса в C#?
В комменатариях к этому вопросу были сообщения:
- ну это же тернарный оператор :'( – Алексей Шиманский 9 июл '16 в 14:25
- Тернарным называется любой оператор с тремя операндами. Оператор, о котором идёт речь, называется «условный оператор». – VladD 9 июл '16 в 17:58
И я запуталась. Везде в интернете подобная конструкция называется тернарником
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
- https://www.php.net/manual/ru/language.operators.comparison.php#language.operators.comparison.ternary
- и т.д.
Объясните пожалуйста, почему указанный в самом начале оператор - условный, а не тернарный? Каково опредедление условного оператора? И тогда в чём его отличие от тернарного? И каково реальное определение тернарного и как он тогда выглядит?
Ответы (2 шт):
Это тернарный условный оператор. Не надо противопоставлять - у данного оператора два свойства - он и условный, и тернарный.
По функциональности оператор ? условный (как 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.