Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526

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

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

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

 Комментарий модератора 
Начало рекурсия в с++ ( ?: = if() else)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2012, 22:59
Ответы с готовыми решениями:

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

тернарный оператор
объясните понятным языком что это такое в с++ и пояснение почему так //r=большее число из 2х значений #define maximum(x, y, r) int...

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

9
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
03.12.2012, 23:01
Цитата Сообщение от go Посмотреть сообщение
Зачем? Ведь, так элегантнее.
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
2
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:02
Цитата Сообщение от Croessmah Посмотреть сообщение
Поверьте, преподавателям абсолютно до фонаря на элегантность, краткость и тому подобное - всё должно быть расписано до малейшей детальки.
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
03.12.2012, 23:04  [ТС]
Цитата Сообщение от David Sylva Посмотреть сообщение
Причём не так как написано в умных книгах, стандартах языка, а так как учили они.
Вы просто объяснять/убеждать не умеете
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:09
в тупом коде, расписаном так, что понятно даже древнему преподу есть определенный плюс. он простой и понятный. иметь дело с таким кодом приятнее, чем со всякими хитрожопостями, которые можно написать.
так что воспринимайте это как тренировку в написании простого кода. простота - одна из метрик качества кода. чем проще тем лучше.
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
03.12.2012, 23:09
Цитата Сообщение от go Посмотреть сообщение
Вы просто объяснять/убеждать не умеете
Преподаватели это особый сорт людей, которые считают, что они всегда правы и они обладают священными знаниям
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:13
добавлю еще, что кроме краткости еще есть такая штука как плотность кода. чем меньше в одной инструкции происходит, тем меньше плотность. (может это как-то по другому называется). чем меньше плотность, тем проще в коде разобраться. вот в такой строчке слишком много всего происходит. такая краткость - зло.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
03.12.2012, 23:14  [ТС]
DU, то что я увидел в первом посте для меня очевидно, легко читается, в одну строчку. А вот с if-else пришлось минуту голову ломать. Простите за оффтоп. Просто смысл этой темы не понятен. Что тернарный оператор уже исключен из стандарта?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
03.12.2012, 23:31
я такие штуки не очень люблю из-за того, что мне неудобно их дебажить.
вот допустим нужно вам узнать значение расчета на какой-то конкретной итерации, как без изменения кода это сделать? это надо хорошо с отладчиком дружить. для этих целей мне больше по душе вариант:
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Эксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.12.2012, 23:54
Цитата Сообщение от David Sylva Посмотреть сообщение

Не по теме:


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

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

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

Не по теме:

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

2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2012, 23:54
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru