Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
#1

Тернарный оператор vs if/else - C++

03.12.2012, 22:59. Просмотров 1452. Ответов 9
Метки нет (Все метки)

Цитата Сообщение от Romantikkk Посмотреть сообщение
что надо сделать через if - else.
Зачем? Ведь, так элегантнее.

 Комментарий модератора 
Начало http://www.cyberforum.ru/cpp-beginners/thread718192.html

http://www.cyberforum.ru/cpp-beginners/thread1784218.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 22:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Тернарный оператор vs if/else (C++):

Вложенный тернарный оператор
Здравствуйте! Нужно вывести кол-во корней квадратного уравнения в зависимости...

Тернарный оператор и наследование
Добрый день! Почему не компилируется этот код: class A{ }; class B...

Засунуть в тернарный оператор
Помогите засунуть выражение if ( (i < 0 || j < 0) || (i >= ROW || j >= COL)...

Альтернатива if (.) {.} (тернарный оператор)
блин запамятовал как это делается пишут вместо стандартной формы что то типа y...

Как работает тернарный оператор
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color ==...

9
Croessmah
++Ͻ
14150 / 8075 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
03.12.2012, 23:01 #2
Цитата Сообщение от go Посмотреть сообщение
Зачем? Ведь, так элегантнее.
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
2
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:02 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
1
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
03.12.2012, 23:04  [ТС] #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
Вы просто объяснять/убеждать не умеете
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:09 #5
в тупом коде, расписаном так, что понятно даже древнему преподу есть определенный плюс. он простой и понятный. иметь дело с таким кодом приятнее, чем со всякими хитрожопостями, которые можно написать.
так что воспринимайте это как тренировку в написании простого кода. простота - одна из метрик качества кода. чем проще тем лучше.
0
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:09 #6
Цитата Сообщение от go Посмотреть сообщение
Вы просто объяснять/убеждать не умеете
Преподаватели это особый сорт людей, которые считают, что они всегда правы и они обладают священными знаниям
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:13 #7
добавлю еще, что кроме краткости еще есть такая штука как плотность кода. чем меньше в одной инструкции происходит, тем меньше плотность. (может это как-то по другому называется). чем меньше плотность, тем проще в коде разобраться. вот в такой строчке слишком много всего происходит. такая краткость - зло.
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
03.12.2012, 23:14  [ТС] #8
DU, то что я увидел в первом посте для меня очевидно, легко читается, в одну строчку. А вот с if-else пришлось минуту голову ломать. Простите за оффтоп. Просто смысл этой темы не понятен. Что тернарный оператор уже исключен из стандарта?
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:31 #9
я такие штуки не очень люблю из-за того, что мне неудобно их дебажить.
вот допустим нужно вам узнать значение расчета на какой-то конкретной итерации, как без изменения кода это сделать? это надо хорошо с отладчиком дружить. для этих целей мне больше по душе вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
int sum (int *arr, size_t size)
{
    if (size == 0)
    {
       return 0; // тут легко поставить бряку. 
    }
 
     const int result = *arr + sum (arr + 1, size - 1);
 
     return result; // тут тоже можно бряку поставить.
}
строчек больше, но в эту функцию полезут за разберательством только когда возникнут проблемы и тогда эта простота пригодится. если проблем нет - то и в функцию никто лезть не будет и для вызывающего кода этот вызов остается однострочным.

Добавлено через 9 минут
продолжаем ликбез.
вот допустим вызывающий код такой:
C++
1
2
3
4
5
6
7
8
if (sum(arr, size) > 10)
{
   ...
}
else
{
  ...
}
и тут код начинает заползать не в ту ветку, в которую ожидалось. т.е. сумма считается неправильно.
берем дебагер и заходим в функцию sum, а там одна строчка:
C++
1
return size ? *arr + sum (arr + 1, size - 1) : 0;
Я вот не знаю как в дебагере узнать, что же в результате возвращается. в более многострочной функции это сделать проще. но даже в этом случае я стараюсь в ифы не вставлять вызов функций. вместо этого предпочитаю:

C++
1
2
3
4
5
6
7
8
9
const int summ = sum(arr, size);
if (summ > 10) // вот чтобы узнать в отладчике результат суммирования, не нужно уходить вглубь вызовов.
{
   ...
}
else
{
  ...
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8020 / 4863 / 1424
Регистрация: 29.11.2010
Сообщений: 13,239
03.12.2012, 23:54 #10
Цитата Сообщение от David Sylva Посмотреть сообщение

Не по теме:


Преподаватели это особый сорт людей, которые считают, что они всегда правы и они обладают священными знаниям

Вы просто не умеете убеждать.
[ликбез] Тернарный оператор не та вещь, которую сложно понять. Она выступает как элемент логики скорее, нежели как элемент программирования. Поэтому его применение не только практично, но и логично. Читабельность кода возрастает в разы (если не вдаваться в крайность, например я вот не применяю тернарного оператора внутри другого, а также не использую его, если конструкция очень длинная). [/ликбез]

Добавлено через 15 минут

Не по теме:

David Sylva, преподаватели по положению выше и соответственно выкрики студента и попытки научить его, прошедшего уже многолетний стаж, смотрятся конечно нелепо. Да, многие из них слепы и могут не знать некоторых вещей. Но если подойти после занятий и спокойно показать что-либо, не орать на всю аудиторию, а именно тет-а-тет обсудить, предоставить аргументы не в стиле "я знаю", а тыкнуть в стандарт, показать на действия компиляторов, ну, или же, если они ругаются на некоторые конструкции (например не разрешают юзать std::sort), предоставить собственную реализацию данной вещи, заявить, что знаете, как она устроена, что можете написать подобное и используете данные алгоритмы лишь для экономии времени. Преподаватели тоже люди, просто поверьте, учитывая количество выскочек, количество людей, которые в один вечер прочитали статью про std::vector и решили что стали пупами земли, это нормальная реакция. К ним люди приходят ни с чем в общей массе, вам лишь надо доказать, что вы не масса. Важно при этом проявлять уважение, не повышать голос, уметь четко аргументировать, "ваше знание" для него не аргумент, т.к. чаще всего студент знает меньше, ну и складывается позиция "Яйца курицу не учат". Нормальный же разговор может помочь вам в проблеме, при этом не стоит ставить себя в позицию всезнающего, лучше прислушиваться к вашему оппоненту.
Не знаю, в чем мб проблема, из всех преподавателей, что у меня были, мне удавалось убедить ровно всех в своей правоте, даже того, который сказал "Я никогда не ошибаюсь".

2
03.12.2012, 23:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 23:54
Привет! Вот еще темы с решениями:

Шахматы(заменить тернарный оператор) на if else
#include <iostream> #include <Windows.h> using namespace std; void main()...

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

Тернарный оператор и множество ошибок в коде
Вот задание: И простой код: #include<iostream> using namespace std; int...

Простая задачка про тернарный оператор
Переписал с учебника простую задачку, однако на 10 и 12 строке показывает...


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

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

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