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

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

03.12.2012, 22:59. Показов 3713. Ответов 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru