Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
1

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

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

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

 Комментарий модератора 
Начало рекурсия в с++ ( ?: = if() else)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2012, 22:59
Ответы с готовыми решениями:

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

тернарный оператор
объясните понятным языком что это такое в с++ и пояснение почему так //r=большее число из 2х...

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

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

9
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
03.12.2012, 23:01 2
Цитата Сообщение от go Посмотреть сообщение
Зачем? Ведь, так элегантнее.
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
2
1317 / 979 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:02 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
1
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
03.12.2012, 23:04  [ТС] 4
Цитата Сообщение от David Sylva Посмотреть сообщение
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
Вы просто объяснять/убеждать не умеете
0
DU
1493 / 1139 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:09 5
в тупом коде, расписаном так, что понятно даже древнему преподу есть определенный плюс. он простой и понятный. иметь дело с таким кодом приятнее, чем со всякими хитрожопостями, которые можно написать.
так что воспринимайте это как тренировку в написании простого кода. простота - одна из метрик качества кода. чем проще тем лучше.
0
1317 / 979 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:09 6
Цитата Сообщение от go Посмотреть сообщение
Вы просто объяснять/убеждать не умеете
Преподаватели это особый сорт людей, которые считают, что они всегда правы и они обладают священными знаниям
0
DU
1493 / 1139 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:13 7
добавлю еще, что кроме краткости еще есть такая штука как плотность кода. чем меньше в одной инструкции происходит, тем меньше плотность. (может это как-то по другому называется). чем меньше плотность, тем проще в коде разобраться. вот в такой строчке слишком много всего происходит. такая краткость - зло.
0
go
Эксперт С++
3643 / 1375 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
03.12.2012, 23:14  [ТС] 8
DU, то что я увидел в первом посте для меня очевидно, легко читается, в одну строчку. А вот с if-else пришлось минуту голову ломать. Простите за оффтоп. Просто смысл этой темы не понятен. Что тернарный оператор уже исключен из стандарта?
0
DU
1493 / 1139 / 165
Регистрация: 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
Форумчанин
Эксперт CЭксперт С++
8169 / 5017 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
03.12.2012, 23:54 10
Цитата Сообщение от David Sylva Посмотреть сообщение

Не по теме:


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

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

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

Не по теме:

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

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2012, 23:54

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

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

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

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


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

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

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