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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
#1

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

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

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

 Комментарий модератора 
Начало рекурсия в с++ ( ?: = if() else)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 22:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тернарный оператор vs if/else (C++):

Тернарный оператор - 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 << "Введите...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13221 / 7493 / 845
Регистрация: 27.09.2012
Сообщений: 18,413
Записей в блоге: 3
Завершенные тесты: 1
03.12.2012, 23:01 #2
Цитата Сообщение от go Посмотреть сообщение
Зачем? Ведь, так элегантнее.
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
2
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:02 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
1
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.12.2012, 23:04  [ТС] #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
Вы просто объяснять/убеждать не умеете
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:09 #5
в тупом коде, расписаном так, что понятно даже древнему преподу есть определенный плюс. он простой и понятный. иметь дело с таким кодом приятнее, чем со всякими хитрожопостями, которые можно написать.
так что воспринимайте это как тренировку в написании простого кода. простота - одна из метрик качества кода. чем проще тем лучше.
0
David Sylva
1286 / 948 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:09 #6
Цитата Сообщение от go Посмотреть сообщение
Вы просто объяснять/убеждать не умеете
Преподаватели это особый сорт людей, которые считают, что они всегда правы и они обладают священными знаниям
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:13 #7
добавлю еще, что кроме краткости еще есть такая штука как плотность кода. чем меньше в одной инструкции происходит, тем меньше плотность. (может это как-то по другому называется). чем меньше плотность, тем проще в коде разобраться. вот в такой строчке слишком много всего происходит. такая краткость - зло.
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.12.2012, 23:14  [ТС] #8
DU, то что я увидел в первом посте для меня очевидно, легко читается, в одну строчку. А вот с if-else пришлось минуту голову ломать. Простите за оффтоп. Просто смысл этой темы не понятен. Что тернарный оператор уже исключен из стандарта?
0
DU
1483 / 1059 / 45
Регистрация: 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Эксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
03.12.2012, 23:54 #10
Цитата Сообщение от David Sylva Посмотреть сообщение

Не по теме:


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

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

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

Не по теме:

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

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

Простая задачка про тернарный оператор - C++
Переписал с учебника простую задачку, однако на 10 и 12 строке показывает ошибки. Что тут не так? #include<iostream> #include<cmath> ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.12.2012, 23:54
Ответ Создать тему
Опции темы

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