С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
#1

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

04.07.2013, 00:55. Просмотров 3575. Ответов 85
Метки нет (Все метки)

Мне вот интересно , что скажут люди о Тернарном операторе, которые уже на С++ программируют немало.
Насколько он удобен, много ли экономит пространство кода и стоит ли его применять сильно часто или же тернарный оператор у многих не приживается в дальнейшем.

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

Тернарный оператор vs if/else - C++
Зачем? Ведь, так элегантнее. Начало http://www.cyberforum.ru/cpp-beginners/thread718192.html

Тернарный оператор - C++
Добрый день, как доказать, что нету тенарного оператора ? Я как понимаю, есть только тенарная операция, которая представляет...

Альтернатива if (.) {.} (тернарный оператор) - C++
блин запамятовал как это делается пишут вместо стандартной формы что то типа y < x : x = m напомните плиз как это называется, какие там...

Засунуть в тернарный оператор - C++
Помогите засунуть выражение if ( (i < 0 || j < 0) || (i >= ROW || j >= COL) || (i == oi && j == oj)) continue; else if (arr)...

Как работает тернарный оператор - C++
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Шахматы(заменить тернарный оператор) на if else - C++
#include <iostream> #include <Windows.h> using namespace std; void main() { int h, w, i, j; cout << "Введите...

85
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.07.2013, 11:57 #31
ИМХО тернарный оператор нужен там, где он уместен и не создает загромождения. И это точно не циклы и не в списке инициализации. Он уместен, например, когда нужно вернуть какое-то значение из функции или при выводе чего-то на экран. Т.е. там, где он виден, чтобы конструкция была короткой и понятной. Больше одного тернарного оператора в конструкции - уже малочитабельно. Вывод таков, что от души пользоваться им можно в небольших проектах, где запутаться будет сложно.
1
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 11:59 #32
Цитата Сообщение от BumerangSP Посмотреть сообщение
Больше одного тернарного оператора в конструкции - уже малочитабельно.
а я обожаю их нагромождать в рекурсивных функциях, один в другом, а второй в третьем и т.д., это же круто!!!
1
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.07.2013, 12:04 #33
Thinker, Поддерживаю
А я еще люблю делать так:
C++
1
for(а тут все тело цикла);
без тернарного дитя это было бы трудновато сделать
1
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.07.2013, 12:07 #34
Thinker, я знаю, а еще специально дописал в конце, что большее их использование возможно в небольших проектах. Ну, к Вам ведь относится
Croessmah, + обязательно оператор "запятая"
1
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
05.07.2013, 12:09 #35
Цитата Сообщение от Thinker Посмотреть сообщение
все спрятано в теле цикла
Так вынесите.
Цитата Сообщение от Thinker Посмотреть сообщение
без ненужных проверок
Хорошо. Признаю что это все глупости - проверка условия в цикле не нужна. Всегда можно обойтись побитовыми операциями.

Цитата Сообщение от Thinker Посмотреть сообщение
в первом:
0, 1, 0, 1,...
во втором:
1, 0, 1, 0,...
C++
1
int i = 1;
Цитата Сообщение от BumerangSP Посмотреть сообщение
ИМХО тернарный оператор нужен там, где он уместен
Вот квинтэссенция всей темы!
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 12:12 #36
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Так вынесите.
так вынес же уже
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.07.2013, 12:16 #37
BumerangSP, Ну как бы не всегда. Все же зависит от цели цикла, так же можно и без тернариуса обойтись, если нет в нем необходимости
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 12:26 #38
Цитата Сообщение от Croessmah Посмотреть сообщение
А я еще люблю делать так:
C++
1
for(а тут все тело цикла);
ну, конструкции типа
C++
1
2
3
   int a[N], sum, i;
   for(i = sum = 0; i < N; sum += a[i] * (a[i] > 0), ++i)
      ;
тоже неплохо смотрятся, компактно
0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 12:59 #39
Цитата Сообщение от BumerangSP Посмотреть сообщение
тернарный оператор нужен там, где он уместен и не создает загромождения.
вот-вот, только это все субъективно, кто-то начинает путаться в трех соснах. как здесь
Создание рекурсивной функции, возвращающей значение для вычисления наибольшего размера в одномерном массиве
один товарищ так и не оценил прелести тернарного оператора. в постах #2 и #4 той темы видно, как меняется код программы.
паскалевским программистам не понять, как здорово, что есть "? :"
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.07.2013, 13:04 #40
Thinker, ну, здесь компактно конечно. Но представьте себе проект в пару тыщ строк (которые в одной файле, не желаю конечно никому такого, но бывают ситуации). Вот кто-то читает его, изучает строки и тут где-то в середине кода такое...Я б не был равнодушным
Вот в олимпиадных задачках да, можно.

Добавлено через 31 секунду

Не по теме:

Croessmah, ну, только не много, оффтоп все ж))

0
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 13:08 #41
BumerangSP, не, ну про реальные проекты я молчу, там лучше обходиться без рекурсии, по возможности, писать предельно понятный код, знаем. после этого как то скучно стает. а на форуме поразвлекаться самое то да, и в олимпиадных задачках тоже.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6519 / 3156 / 309
Регистрация: 04.12.2011
Сообщений: 8,726
Записей в блоге: 5
05.07.2013, 13:11 #42
Цитата Сообщение от BumerangSP Посмотреть сообщение
и не в списке инициализации
При инициализации констант или ссылок в списках и трудно заменить. Читал где-то, не помню где.
При использовании в качестве оператора, а не как выражения, - везде проигрывает логическим операторам во всём кроме размера. Читать его - радость. Но главное, что трудно модифицировать. Не позволяет выбрасывать вразумительные исключения...

Не по теме:


Я подумал, что SatanaXIII, привел хороший пример, показывающий как тренарник работает там, где применение if просто невозможно лексически и намеренно написал некорректно, чтобы подчеркнуть, что не имеет ввиду что так делать нужно. И не ошибся, вроде.

2
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.07.2013, 13:13 #43
Thinker, да, тут мы как-то в общем говорим, так что можно согласовать на уместности в определенной ситуации
Хотя вот насчет скуки...не знаю, есть еще много очень интересных вещей, которые "не дадут скучать" =)

IGPIGP, я специально написал в посте, что это - имхо. Вот кому как, а я постараюсь избегать в своих "творениях" такую конструкцию на невидных местах. По поводу замены: всегда есть способ)
1
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
05.07.2013, 13:22 #44
Цитата Сообщение от SatanaXIII Посмотреть сообщение
На самом деле в циклы удобно пихать:
C++
1
for(int i=0; i<10; if(!i%2){i++;}else{i+=2;})
а ничего, что это эквивалентно более красивой конструкции
C++
1
2
3
4
   i = 0;
...
   for(i = 1; i < 10; i += 2)
...
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6519 / 3156 / 309
Регистрация: 04.12.2011
Сообщений: 8,726
Записей в блоге: 5
05.07.2013, 13:24 #45
Цитата Сообщение от IGPIGP Посмотреть сообщение
заканчивается кавычкой. А выражение заканчивабющееся кавычкой
не верю, что не точкой с запятой написал.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
1) У меня а в конце равно 21.
И у меня. Там строчкой выше видно. А в итоговой оставил старый комент (123 - не заметил))
Цитата Сообщение от SatanaXIII Посмотреть сообщение
На счет возвращаемого типа не очень понятно:
В условии, - всегда bool (целый). В ветвях типы могут быть разные, и если ожидается более короткий, - переполнение.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А о чем предупреждать?
О приведении значения к bool, как это происходит с логическими выражениями в if например.
C++
1
if(a=123)...//warning.....
0
05.07.2013, 13:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 13:24
Привет! Вот еще темы с ответами:

Тернарный оператор: возврат значения - C++
Приветствую. При компиляции ниже приведенного кода bool MyFunc() { bool flag = false; // .... некоторые действия // .......

Тернарный оператор и операторы безусловного перехода - C++
Здравствуйте, может кто-нибудь объяснить, почему не компилируется оператор ?, если в одной из последующих частей стоит break, return,...

Тернарный оператор - найти ошибку в коде - C++
Не пойму почему выдает ошибку, вроде программы самые простые и ошибиться то негде: #include&lt;iostream&gt; using namespace std; int main()...

Является ли тернарный оператор оператором сравнения? - C++
Является ли тернарный оператор оператором сравнения? Подскажите пожалуста


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.