Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46

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

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

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

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

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

 Комментарий модератора 
Тема вынесена из другой
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2016, 23:27
Ответы с готовыми решениями:

WCF Data Services. В чем плюсы? И чем лучше или хуже простого Web-API?
Пытаюсь разобраться с WCF Data Services. Не совсем понимаю, для чего это нужно. В интернете мало какого-то конкретного описания....

Проверить правильность написания круглых скобок
Проверить правильность написания круглых скобок.питон

Необходимо проверить расстановок скобок на правильность написания
Необходимо проверить расстановок скобок.На правильность написания и исправить. Правильно (), Не правильно (( Надо сравнить скобки 1-ая...

27
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
13.03.2016, 15:10
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
разделите пожалуйста на примере следующего кода:
C++
1
2
if ( A && B && C && D && !E)
    somehing();
Я не о таких условиях говорил. Это как раз-таки нормальное условие имхо. Тут в скобках смысла не будет, даже если их поставить.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.03.2016, 15:24
Цитата Сообщение от pav1uxa Посмотреть сообщение
Я не о таких условиях говорил. Это как раз-таки нормальное условие имхо. Тут в скобках смысла не будет, даже если их поставить.
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
0
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
13.03.2016, 16:31  [ТС]
Цитата Сообщение от 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)
{...}
С одной стороны, если таких условий будет несколько, то процессору будет легче выполнить одну операцию сложения, а потом кучу сравнений, чем в куче сравнений каждый раз проводить сложение. А с другой стороны, наша программа будет кушать больше оперативной памяти... В общем, я за скобки, если с ними читабельней!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.03.2016, 17:01
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Неужели в откомпилированном виде исполняемый файл
выхлоп компилятора - трудности компилятора.
интерес представляет исходный код.

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

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

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

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

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

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

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

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

ваш код показывает, что вы боретесь с последствиями.
1
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
13.03.2016, 17:11  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
представленный вами пример кода - говнокода страшен сам по себе.
Ага, щаз с пенкой у рта буду защищать свой код от оскорблений, ждите.. ))))
Цитата Сообщение от hoggy Посмотреть сообщение
ваш код показывает, что вы боретесь с последствиями.
Ничего не борюсь. Для меня код читабельный. Всё разбито на функции и легко анализируется разработчиком. Просто как пример привёл. А если кого-то испугали не переменные типа i и j, а обращение к переменной внутри структуры с длинным названием - ну, извините ))))
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
13.03.2016, 17:55
Цитата Сообщение от hoggy Посмотреть сообщение
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Я говорю что так не делается, а Вы меня же просите придумать туда "замороченные выражения" и чего-то проиллюстрировать

Я имел ввиду как раз вот это:
Цитата Сообщение от hoggy Посмотреть сообщение
условие может быть каким угодно, и сколько угодно сложным.
но его всегда можно свести вот к такому лаконичному виду.
вместо A,B,C,D,E можно подставить имена функций или макросов.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.03.2016, 18:26
Цитата Сообщение от pav1uxa Посмотреть сообщение
Я говорю что так не делается, а Вы меня же просите придумать туда "замороченные выражения" и чего-то проиллюстрировать
выше человек наглядно продемонстрировал говнокод.

Цитата Сообщение от pav1uxa Посмотреть сообщение
Я имел ввиду как раз вот это:
ок.
0
13.03.2016, 18:35

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2016, 18:35

В чем плюсы лямбд?
В чем очевидные и/или измеряемые плюсы лямбд в C++? Повышает ли это скорость кода? Или памяти меньше? Или еще что-то? Ну кроме повышения...

На чем легче писать игры? плюсы и минусы
Народ,а как вы думаете/имели опыт на чем легче писать игры, и насколько хорошо возможно потом будет реализовать хорошо сделанную игру? ...

В чём плюсы и минусы жестких и символьных ссылок?
пожалуйста, подскажите в чем минусы и плюсы жестких и символьных ссылок в линуксе? что нельзя реализовать например в жесткой ссылке, но...

В чем плюсы Map перед обычными объектом
Можете подсказать? В чем преимущества Map перед обычным объектом, помимо того что Map принимает в качестве ключа все типы данных? И где...

В чем плюсы использования автоматически реализуемых свойств?
В чем плюсы использования автоматически реализуемыех свойств?ведь они ничем не отличаются от простых переменных,так как там тоже нельзя...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru