Форум программистов, компьютерный форум CyberForum.ru

Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.07.2013, 00:55     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #1
Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало.
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.

Да не спорю придумали его наверное не зря, перед какими то задачи он может и удобен, но мне кажется что его используют мало людей
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2013, 00:55     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Посмотрите здесь:

C++ Засунуть в тернарный оператор
Тернарный оператор vs if/else C++
C++ Шахматы(заменить тернарный оператор) на if else
C++ Альтернатива if (.) {.} (тернарный оператор)
Тернарный оператор: возврат значения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.07.2013, 16:11     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #61
Цитата Сообщение от taras atavin Посмотреть сообщение
Свич для выбора по результатам сравнения, а тернарный для сравнения.
Так "тернарный" он потому, что три аргумента принимает, а не три результата возвращает.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:27     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #62
Цитата Сообщение от taras atavin Посмотреть сообщение
должен возвращать один из трёх результатов и быть оператором именно сравнения
хорошо, рассмотрим для примера функцию сигнум (возвращает знак)
sgn(x) =
0, x=0,
-1, x<0,
1, x >0.
как красиво ее описать, только не типа
C++
1
2
3
4
int sgn(double x)
{
   return x ? x / fabs(x) : 0;
}
с другой стороны, это пример того, что можно ухитриться и не писать кучу условий
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
05.07.2013, 16:34     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #63
Цитата Сообщение от I love myguitar Посмотреть сообщение
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.
ну вот пример где он оправдан
C++
1
printf("Max=%d"A>B?A:B);
или вот кусок кода от Криса Касперски
C++
1
2
3
HWND hwnd;
hwnd = FindWindow(0, "Калькулятор");
printf("hWnd: %Xh\n", (hwnd)?(int)hwnd:0xBAD);
если окно найдено выдается его дескриптор если нет пишется "BAD"
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 16:34     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #64
Цитата Сообщение от Thinker Посмотреть сообщение
хорошо, рассмотрим для примера функцию сигнум (возвращает знак)
sgn(x) =
0, x=0,
-1, x<0,
1, x >0.
как красиво ее описать, только не типа
Код C++
1
2
3
4
int sgn(double x)
{
* *return x ? x / fabs(x) : 0;
}
с другой стороны, это пример того, что можно ухитриться и не писать кучу условий
Код
:= function sgn(:= parametr x is signed integer) is signed integer
function sgn(:= parametr x is signed integer)
begin
     switch (x?0)
     begin
          case less: return -1
          case equal: return 0
          case greater: return 1
     end;
end
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:37     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #65
а я бы так написал
C++
1
2
3
4
int sgn(double x)
{
   return  (x > 0) - (x < 0);
}
и не заморачивался. красиво и симметрично. видите, не всегда надо кучу условий прописывать
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
05.07.2013, 16:45     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #66
Цитата Сообщение от ValeryS Посмотреть сообщение
или вот кусок кода от Криса Касперски
...
если окно найдено выдается его дескриптор если нет пишется "BAD"
Крис - известный шутник. Что будем делать, если по несчастливому стечению обстоятельств hwnd == 0xBAD ?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:45     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #67
ну, это я против правил играю, только что придумал. у кого какие еще варианты есть? так как данные не всегда числовые бывают
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 16:47     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #68
Цитата Сообщение от Thinker Посмотреть сообщение
а я бы так написал
Код C++
1
2
3
4
int sgn(double x)
{
* *return *(x > 0) - (x < 0);
}
и не заморачивался.
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа? У меня же нет ни какой связи с низким уровнем, всё явно и может быть описано в стандарте языка высокого уровня в отрыве от его реализаций и реализаций типов.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 16:50     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #69
Цитата Сообщение от taras atavin Посмотреть сообщение
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа?
не, это уже придирки к классному алгоритму я там ниже пояснил, что это в данном разделе игра против правил.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 16:53     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #70
Алгоритм читерский, я тоже могу вотнуть в функцию кусок на асме.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 17:02     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #71
Цитата Сообщение от taras atavin Посмотреть сообщение
я тоже могу

Не по теме:

ну так и пользуйтесь этим, не все же по шаблонам делать и сдандартно мыслить, как учат в школе с глупыми, отмороженными, никому ненужными, убивающими творческие способности ЕГЭ...

CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
05.07.2013, 17:25     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #72
Цитата Сообщение от taras atavin Посмотреть сообщение
А если bool не на инте? А если true равно 0, или -1? А если читающий не подозревает о числовой основе boolа?
(ухмыляясь) А фиолетово.

bool обязан "уметь" преобразовываться в int, причем не абы как, а точно по Стандарту (4.7): false = 0, true = 1.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 17:58     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #73
Только в исходнике о преобразовании ни слова, а о такой тонкости стандарта можно во-первых не знать, а во-вторых во многих языках определено смешнее.
false равен 0, true не равен false
. Всё. А ещё бывает
false равен 0, у true все биты противоположны
. Единичный true - не аксиома, а выбор.

Добавлено через 7 минут
А можно слепить язык, в котором нулю будет равен true. Или даже так. Есть указатель nullptr, на пк это ноль, а на сигнальных адрес больше всех валидных. Берём тот же код за false ради упрощения и ускорения проверки указателя на
Код
if (ptr)
, а true получаем инверсией всех бит. Выбор кодов внутреннего представления булевых значений и целых значений, к которым они приводятся, - произвол, закрепление его в стандарте одного языка не решает проблемы возможного не знания такого пункта стандарта тем, кому исходник на глаза попасться может, но кто сам специалистом по языку не является.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
05.07.2013, 18:03     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #74
Дык, о других языках можно рассуждать, конечно.... но ведь эта часть форума именуется "Форум C++ > Форум С++ для начинающих", не так ли?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 18:18     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #75
А ничего, что здесь нет просьбы решить конкретную задачу на c++, зато есть обсуждение самого языка и конкретного оператора в нём? Нужен ли он вообще и каким должен быть. А отсюда и вопросы сложности миграции программистов с других языков, и проблемы обсуждения исходника с тем, кто алгоритмически мыслить может, но на плюсах писать не умеет и не собирается. if then else, или хотябы
C++
1
2
3
4
5
6
7
8
if ()
{
 
}
else
{
 
}
в этом плане проще, а читерская конструкция через инт, наоборот, ещё сложней.

Добавлено через 6 минут
Моя версия sgn тоже будет вовсе не на тернарном сравнении, а
Код
:= inline function signe(:=parametr x is signed int) is sigened int
inline function signe(:=parametr x is signed int)
begin
     return ((signed int)(x>0 as boolean))-((signed int)(x<0 as boolean))
end
. Но это читерство будет глубоко спрятано ото всех, кто будет её юзать.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,698
Записей в блоге: 3
05.07.2013, 18:22     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #76
Цитата Сообщение от taras atavin Посмотреть сообщение
Нужен ли он вообще
именно для
Цитата Сообщение от taras atavin Посмотреть сообщение
и вопросы сложности миграции программистов с других языков
о Си речь. Сиречь о истории... история. И о языке.
Да и чем это плохо, если есть возможность.
C++
1
2
3
int a[]={1, 2, 3, 4};
cout<<"Список инициализации массива\na[]= ";
for(int i=0; i<4; ++i) cout<<( !i ? "{" : " " ) << a[i] << ( i==3 ? "};" :"," );
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.07.2013, 18:23     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #77
Кстати, оно не будет работать, если false=-1, а true=1.
BumerangSP
05.07.2013, 18:27
  #78
 Комментарий модератора 
Так, давайте впредь обсуждать лишь необходимость использования тернарной операции в программах.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,868
Записей в блоге: 2
Завершенные тесты: 1
05.07.2013, 18:28     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #79
taras atavin, Все-таки это раздел C++, а не раздел "рандомный язык", так что false преобразуется в 0, а true в 1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 18:49     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Еще ссылки по теме:

C++ Тернарный оператор - найти ошибку в коде
Тернарный оператор и множество ошибок в коде C++
C++ Как работает тернарный оператор

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 18:49     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ? #80
Цитата Сообщение от taras atavin Посмотреть сообщение
а во-вторых во многих языках определено смешнее. . Всё. А ещё бывает . Единичный true - не аксиома, а выбор.
а еще не во всех языках есть "? :". так что, это означает, что тема закрыта?! как мы можем обсуждать то, что не везде есть. давайте темы по мат.логике забабацаем, уж она то во всех языках присутствует, вернее, на ее основе они и базируются.
Yandex
Объявления
05.07.2013, 18:49     Стоит ли использовать тернарный оператор, если всегда есть альтернативы в С ?
Ответ Создать тему
Опции темы

Текущее время: 23:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru