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

C++

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

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

05.03.2016, 23:27. Просмотров 573. Ответов 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++ Builder Создание игры "монополия" или по-другому "менеджер"
C++ Вывести "Молодой" или "Старый" в зависимости от введенного возраста
C++ В чем разница между "Порядок выполнения программ на языке C" и "Структура программы на языке C"
C++ Обчисление введенной строки любого формата(пример:"(2+3)/4*2"или"2+3"или ...)
C++ Заменить символы, находящиеся внутри скобок, на символ "звездочка"
C++ Реализовать условие "больше или равно", "меньше или равно" для простых дробей в классе
Перегрузка оператора "++" и "--" в чем может быть причина нарушение прав доступа? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pav1uxa
1778 / 1618 / 617
Регистрация: 23.01.2014
Сообщений: 5,850
Завершенные тесты: 1
13.03.2016, 15:10     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #21
Цитата Сообщение от hoggy Посмотреть сообщение
разделите пожалуйста на примере следующего кода:
C++
1
2
if ( A && B && C && D && !E)
    somehing();
Я не о таких условиях говорил. Это как раз-таки нормальное условие имхо. Тут в скобках смысла не будет, даже если их поставить.
hoggy
6153 / 2519 / 442
Регистрация: 15.11.2014
Сообщений: 5,564
Завершенные тесты: 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
6153 / 2519 / 442
Регистрация: 15.11.2014
Сообщений: 5,564
Завершенные тесты: 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
1778 / 1618 / 617
Регистрация: 23.01.2014
Сообщений: 5,850
Завершенные тесты: 1
13.03.2016, 17:55     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #26
Цитата Сообщение от hoggy Посмотреть сообщение
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Я говорю что так не делается, а Вы меня же просите придумать туда "замороченные выражения" и чего-то проиллюстрировать

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

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

C++ Дано натуральное число. Верно ли, что цифра "a" встречается в нем реже, чем цифра "b"?
C++ Структуры "Студент" и "Дата": с чем связана данная ошибка?
"Чудеса типа float" или "Куда девалась информация?" C++
бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному C++
C++ WinAPI Ошибка: выражение слева от ".length"/".substr" должно представлять класс, структуру или объединение

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

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

Не по теме:

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

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

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