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

C++

Войти
Регистрация
Восстановить пароль
 
 
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
#1

Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" - C++

05.03.2016, 23:27. Просмотров 583. Ответов 27
Метки нет (Все метки)

Ну, Вам правильно ответили, но второе условие и так будет исполняться. Т.е. если текст не пустой, то будет срабатывать любое из значений, а не только "12345". Так что делайте так:

C++ (Qt)
1
if ((Edit9 -> Text) == "123") || (Edit9->Text == "12345"))
Так логичнее )))

PS: для "и" вместо "или" используется && вместо ||

 Комментарий модератора 
Тема вынесена из другой
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2016, 23:27     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
Посмотрите здесь:

Заменить символы, находящиеся внутри скобок, на символ "звездочка" - C++
Помогите решить данные задачи пожалуйста, завтра надо сдавать, заранее спасибо. 2.Ввести строку символов с клавиатуры, среди которых...

Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b" - C++
задача: Напечатать true, если в заданном тексте буква "а" встречается чаще чем буква "b", и напечатать false в противном случае. Помогите...

О "нестабильности" или "переполнении" цикла foreach - C++
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь: оказывается, что цикл foreach может переполниться при...

"Точность вычислений" или "Элементарная погрешность" - C++
Всем привет! Решаю задачку (Задача А - во вложениях), где даны координаты вершин треугольника, и нужно найти наибольший угол в нем. ...

Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? - C++
Например printf(setlocale(0, "")); cout << endl; printf(setlocale(LC_ALL, "")); выдают одинаковый результат (ну, на моей...

Что применить "\n" или "endl"? - C++
Эти две операции похожи - они переходят на новую строку. Но endl очищает буфер, но при этом дольше выполняется. Так что же лучше...

"И" ведет себя как "ИЛИ" - C++
Здраствуйте, помогите разобраться. Есть функция, кот. возвращает true, если клавиша удерживается. Если вызвать эту функцию для проверки 2...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lelik-pahan
1151 / 722 / 69
Регистрация: 25.11.2009
Сообщений: 1,455
Завершенные тесты: 1
11.03.2016, 09:37     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #16
Цитата Сообщение от pav1uxa Посмотреть сообщение
Если приводите примеры - то хотя бы приводите реальные
Посмотри внимательно на второй пример. Когда я его писал, я убрал лишние скобки, лишние пробелы и в двух случаях заменил Edit9 на Edit8, так что его нельзя заменить на if (false)
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
12.03.2016, 17:35     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #17
Цитата Сообщение от gunslinger Посмотреть сообщение
В скобки условия можно заключать для дальнейшей поддержки кода, вдруг условия поменяются
плохой ход.

хороший ход: решать проблемы настоящего,
а не будущего, которое может и не наступить.

и потом, код пишется один раз, а потом много много раз читает.

избыток скобочек ухудшает читабельность.

Цитата Сообщение от gunslinger Посмотреть сообщение
Плюс это исключает/сокращает трудноуловимые ошибки - все могут ошибиться.
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
Цитата Сообщение от BRcr Посмотреть сообщение
Приглашаю страждущих заодно поплеваться на разработчиков библиотек.
вполне себе годный код.
с чего там плеваться то?
gunslinger
случайный прохожий
1132 / 750 / 191
Регистрация: 20.07.2013
Сообщений: 2,067
13.03.2016, 01:36     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #18
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
"Запутался" в приоритете операций (сложное условие) и потом сидишь, голову ломаешь, почему результат не соответствует ожиданиям.
Лишние скобки, считаю, могут помочь в дальнейшей поддержке кода - люди разные бывают, не у всех "основы" запоминаются, как дважды два.
pav1uxa
1788 / 1628 / 622
Регистрация: 23.01.2014
Сообщений: 5,906
Завершенные тесты: 1
13.03.2016, 10:11     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #19
По мне так "сложное условие" - это уже само по себе явление неверное, его не должно существовать. Ну не бывает в реальном коде вот таких трехэтажных условий. Его разделяют на несколько простых. Иначе как Вы вообще его дебажить будете? Экономия строк в коде еще никогда никому не помогала.

А приведенное в теме сравнение со строками так это вообще что-то с чем-то. Ну не будет такого в практическом коде никогда...
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
13.03.2016, 14:05     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #20
Цитата Сообщение от gunslinger Посмотреть сообщение
"Запутался" в приоритете операций (сложное условие) и потом сидишь, голову ломаешь, почему результат не соответствует ожиданиям.
это не есть ответ на мой вопрос.

мой вопрос был:
Цитата Сообщение от hoggy Посмотреть сообщение
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.

выше вы вещали об ошибках, которые якобы сложно обнаружить.

однако, на практике только два варианта:
1.
либо оно вообще не скомпилиццо.

2.
ошибка в логических выражений - это ошибка бизнес логики.
такое не может быть незамеченным.

итого: любые подобные ошибки если они и случаются,
обнаруживаются на первом же старте юнит тестов

это не та вещь, из-за которой стоит заморачиваться.

Цитата Сообщение от gunslinger Посмотреть сообщение
Лишние скобки, считаю, могут помочь в дальнейшей поддержке кода - люди разные бывают, не у всех "основы" запоминаются, как дважды два.
чем проще код - тем лучше он читается людьми независимо от квалификации.
избыток синтаксиса всегда делает код сложнее.

Добавлено через 1 минуту
Цитата Сообщение от pav1uxa Посмотреть сообщение
Ну не бывает в реальном коде вот таких трехэтажных условий.
ещё как бывают.

Цитата Сообщение от pav1uxa Посмотреть сообщение
Его разделяют на несколько простых.
разделите пожалуйста на примере следующего кода:

C++
1
2
if ( A && B && C && D && !E)
    somehing();
pav1uxa
1788 / 1628 / 622
Регистрация: 23.01.2014
Сообщений: 5,906
Завершенные тесты: 1
13.03.2016, 15:10     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #21
Цитата Сообщение от hoggy Посмотреть сообщение
разделите пожалуйста на примере следующего кода:
C++
1
2
if ( A && B && C && D && !E)
    somehing();
Я не о таких условиях говорил. Это как раз-таки нормальное условие имхо. Тут в скобках смысла не будет, даже если их поставить.
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
13.03.2016, 15:24     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #22
Цитата Сообщение от pav1uxa Посмотреть сообщение
Я не о таких условиях говорил. Это как раз-таки нормальное условие имхо. Тут в скобках смысла не будет, даже если их поставить.
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
13.03.2016, 16:31  [ТС]     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #23
Цитата Сообщение от hoggy Посмотреть сообщение
разделите пожалуйста на примере следующего кода:
Эх, вот, приходят на мыло уведомления о новых сообщениях - и читаю эту тему.. ))) Народу заняться нечем, и скобки обсуждают... )))) Неужели в откомпилированном виде исполняемый файл будет отличаться в зависимости от наличия/отсутствия скобок в условиях? По идее, компилятор должен привести все одинаковые условия к одному виду. Разве нет?

Но тут просят хитрое сложное условие из реальной жизни, чтоб без скобок ну никак... Дописываю торгового советника для форекса. Приведу пример обработки некоторого события:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 if (Market.VipeData.Layers[LayerN].Way == 1) // слой покупок
  if ((Compare(Market.VipeData.Layers[LayerN].Prices.TPwayPrice - 3.0 * Market.InputData.Terminal.MarketInfo.SPREAD_DOUBLE,
               Market.InputData.Terminal.MarketInfo.BID, Market.InputData.Terminal.MarketInfo.POINT_d10) >= 0) || // профит выше текущей цены как минимум на 3 спреда
      (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID2 > 0)) // не первый накопительный
   if (Market.InputData.Terminal.MarketInfo.BID < Market.VipeData.Layers[LayerN].Prices.TPwayPrice) // рынок ниже уровня профита
    if (Compare(Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OpenPrice + Market.InputData.Terminal.MarketInfo.POINT,
                Market.VipeData.Market.MinBidForAccMinMinutes, Market.InputData.Terminal.MarketInfo.POINT_d10) < 0) // нижняя волна выше трейлинга в 1 пп
     if (Compare(Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OpenPrice + Market.InputData.Terminal.MarketInfo.POINT,
                 Market.InputData.Terminal.MarketInfo.BID - Market.InputData.Terminal.MarketInfo.STOPLEVEL_DOUBLE,
                 Market.InputData.Terminal.MarketInfo.POINT_d10) <= 0) // STOPLEVEL выдержан
      if (Market.VipeData.Layers[LayerN].Lots.MartinLotNotLocked > Market.VipeData.Layers[LayerN].Lots.CompensatorLotNotLocked) // лот мартина больше лота компенсаторов
       if (Market.InputData.Terminal.Bars[0].Signal.CanBuy) // есть сигнал на покупку
        if ((Market.InputData.Terminal.MarketInfo.ASK <= Market.VipeData.Layers[LayerN].Prices.StandardPriceForLastOrder) || // расстояние выдержано
            (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID2 > 0)) // накопительный
         if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].Protected == false)
          if ((Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN != -1) && // есть незащищённые компенсаторы
              (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].OrderID2 ==
               Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID)) // у нашего ордера есть незащищённый компенсатор
           if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].SecondsOfExisting <=
               Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].SecondsOfExisting) // и этот компенсатор младше нашего ордера
            if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].Lot + Market.InputData.Terminal.MarketInfo.LOTSTEP_d10 <
                Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].Lot) // и лот компенсатора меньше лота нашего ордера
 {//...
 }
Страшно представить, как это записать в одно условие... Собственно, каждое новое "if" - это заменитель "&&". А вот там, где "или" - приходится писать со скобками.

Цитата Сообщение от hoggy Посмотреть сообщение
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Ну, можно создать булевые переменные A,B,C,D,E,F, в них затолкать условия и выполнить проверку в точности, как в приведенном выражении:

Цитата Сообщение от hoggy Посмотреть сообщение
if ( A && B && C && D && !E) somehing();
Однако в таких случаях меня всегда мучает вопрос: "что лучше: усложнить условие или занять память новой переменной?". Ну, например, с точки зрения экономии ресурсов, как сделать лучше:

C++ (Qt)
1
2
3
int i = 5;
if (i + 1 > 3)
{...}
или

C++ (Qt)
1
2
3
4
int i = 5;
int j = i + 1;
if (j > 3)
{...}
С одной стороны, если таких условий будет несколько, то процессору будет легче выполнить одну операцию сложения, а потом кучу сравнений, чем в куче сравнений каждый раз проводить сложение. А с другой стороны, наша программа будет кушать больше оперативной памяти... В общем, я за скобки, если с ними читабельней!
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
13.03.2016, 17:01     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #24
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Неужели в откомпилированном виде исполняемый файл
выхлоп компилятора - трудности компилятора.
интерес представляет исходный код.

Цитата Сообщение от Kvarcenar Посмотреть сообщение
Страшно представить, как это записать в одно условие.
представленный вами пример кода - говнокода страшен сам по себе.

при таком подходе скобочки уже ничего не ухудшают.

Цитата Сообщение от Kvarcenar Посмотреть сообщение
Однако в таких случаях меня всегда мучает вопрос: "что лучше: усложнить условие или занять память новой переменной?". Ну, например, с точки зрения экономии ресурсов, как сделать лучше:
компиляторы уже давным давно научились оптимизировать промежуточные вычисления.
так что без разницы.

вопрос лишь в том: что читабельнее.

выше я привел пример условия:

C++
1
2
if ( A && B && C && D && !E)
    somehing();
условие может быть каким угодно, и сколько угодно сложным.
но его всегда можно свести вот к такому лаконичному виду.
вместо A,B,C,D,E можно подставить имена функций или макросов.

если формула истинности теряется в условии,
из-за обилия текста - это плохой код.

Добавлено через 1 минуту
Цитата Сообщение от Kvarcenar Посмотреть сообщение
В общем, я за скобки, если с ними читабельней!
ну да, если.

ваш код показывает, что вы боретесь с последствиями.
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
13.03.2016, 17:11  [ТС]     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #25
Цитата Сообщение от hoggy Посмотреть сообщение
представленный вами пример кода - говнокода страшен сам по себе.
Ага, щаз с пенкой у рта буду защищать свой код от оскорблений, ждите.. ))))
Цитата Сообщение от hoggy Посмотреть сообщение
ваш код показывает, что вы боретесь с последствиями.
Ничего не борюсь. Для меня код читабельный. Всё разбито на функции и легко анализируется разработчиком. Просто как пример привёл. А если кого-то испугали не переменные типа i и j, а обращение к переменной внутри структуры с длинным названием - ну, извините ))))
pav1uxa
1788 / 1628 / 622
Регистрация: 23.01.2014
Сообщений: 5,906
Завершенные тесты: 1
13.03.2016, 17:55     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #26
Цитата Сообщение от hoggy Посмотреть сообщение
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Я говорю что так не делается, а Вы меня же просите придумать туда "замороченные выражения" и чего-то проиллюстрировать

Я имел ввиду как раз вот это:
Цитата Сообщение от hoggy Посмотреть сообщение
условие может быть каким угодно, и сколько угодно сложным.
но его всегда можно свести вот к такому лаконичному виду.
вместо A,B,C,D,E можно подставить имена функций или макросов.
hoggy
6422 / 2640 / 458
Регистрация: 15.11.2014
Сообщений: 5,831
Завершенные тесты: 1
13.03.2016, 18:26     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #27
Цитата Сообщение от pav1uxa Посмотреть сообщение
Я говорю что так не делается, а Вы меня же просите придумать туда "замороченные выражения" и чего-то проиллюстрировать
выше человек наглядно продемонстрировал говнокод.

Цитата Сообщение от pav1uxa Посмотреть сообщение
Я имел ввиду как раз вот это:
ок.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2016, 18:35     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
Еще ссылки по теме:

чем отличается вызов объекта через "." и через "->" - C++
Здравствуйте. Вот создал топик для тех, кто желает сам познать С++, но у которых есть вопросы по базовым знаниям. Начну с вопроса:...

Проверить, есть ли в слове приставка "пре" или "пре". - C++
Помогите решить задачу! Проверить, есть ли в слове приставка &quot;пре&quot; или &quot;пре&quot;. Заранее благодарен!

Сгенерировать число "1" или "2" - C++
Как сделать с помощью функции rand генерацию числа в диапазоне от 0 до 1? Просто если пишу rand() % 1 то всё время выдаёт только одно и...

Определить, находится ли координата на "ободе", или за пределами, или внутри круга (найти ошибку) - C++
Задача: пользователь вводит радиус круга и координату точки (х,у). Нужно определить находиться ли координата на &quot;ободе&quot; круга или за...

Выдает ошибку "No MCI Device open", в чем ошибка - C++ Builder
Я так подозреваю, что в выборе картинок на кнопках SpeedButton. Подскажите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
pav1uxa
13.03.2016, 18:35     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
  #28

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
говнокод.
Вот и я о том же...

Yandex
Объявления
13.03.2016, 18:35     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
Ответ Создать тему
Опции темы

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