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

C++

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

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

05.03.2016, 23:27. Просмотров 549. Ответов 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lelik-pahan
1138 / 709 / 63
Регистрация: 25.11.2009
Сообщений: 1,399
Завершенные тесты: 1
09.03.2016, 19:45     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #2
Цитата Сообщение от Kvarcenar Посмотреть сообщение
if ((Edit9 -> Text) == "123") || (Edit9->Text == "12345"))
только со скобками беда. На три открывающие приходится четыре закрывающих. При том, что нужна всего-то одна пара, обрамляющая всё условие целиком.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22475 / 14652 / 4174
Регистрация: 22.10.2011
Сообщений: 25,959
Записей в блоге: 4
09.03.2016, 19:55     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #3
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
При том, что нужна всего-то одна пара, обрамляющая всё условие целиком.
Ну, для того, чтобы это осознать, нужно же познакомиться с приоритетом операций, а кому это интересно?
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
09.03.2016, 21:02  [ТС]     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #4
Цитата Сообщение от volvo Посмотреть сообщение
Ну, для того, чтобы это осознать, нужно же познакомиться с приоритетом операций, а кому это интересно?
Ой, да ладно! ))) Одна закрывающая после "Edit9 -> Text" лишняя... Очепятка... А операции беру в скобки, потому что так удобнее и читабельнее!
Почтальон
Модератор
311 / 237 / 38
Регистрация: 22.03.2015
Сообщений: 1,857
Завершенные тесты: 1
09.03.2016, 21:06     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #5
Цитата Сообщение от Kvarcenar Посмотреть сообщение
А операции беру в скобки, потому что так удобнее и читабельнее!
Ошибочно так полагать. По той простой причине - скобки нужны для логики работы программы, т.е. для приоритетов исполнения, а не для того, что это удобно или читабельно.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22475 / 14652 / 4174
Регистрация: 22.10.2011
Сообщений: 25,959
Записей в блоге: 4
09.03.2016, 21:15     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #6
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Очепятка...
Не брал бы в скобки - не было бы очепяток.
Цитата Сообщение от Kvarcenar Посмотреть сообщение
потому что так удобнее и читабельнее
Попробуй Лисп изучать. С такой любовью к скобкам - тебе понравится.
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
09.03.2016, 21:15  [ТС]     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #7
Цитата Сообщение от Почтальон Посмотреть сообщение
скобки нужны для логики работы программы, т.е. для приоритетов исполнения, а не для того, что это удобно или читабельно.
В смысле? Ну, при отладке программы при раздуплении строки
C++
1
if (Edit9 -> Text == "123" && Edit9 -> Text == "12345" || Edit9 -> Text == "12345" && Edit9 -> Text == "12345")
я потрачу секунд на 5 больше времени, чем если запишу
C++
1
2
if (((Edit9 -> Text == "123")    && (Edit9 -> Text == "123456")) ||
    ((Edit9 -> Text == "12345") && (Edit9 -> Text == "123457")))
Или Вы хотите сказать, что в откомпилированном виде первый вариант будет исполняться быстрее второго? )))
Почтальон
Модератор
311 / 237 / 38
Регистрация: 22.03.2015
Сообщений: 1,857
Завершенные тесты: 1
09.03.2016, 21:19     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #8
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Или Вы хотите сказать, что в откомпилированном виде первый вариант будет исполняться быстрее второго?
Нет, я хочу сказать что: "Казнить нельзя помиловать"
gunslinger
случайный прохожий
1110 / 728 / 185
Регистрация: 20.07.2013
Сообщений: 1,995
10.03.2016, 01:53     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #9
В скобки условия можно заключать для дальнейшей поддержки кода, вдруг условия поменяются, а с ними и приоритет. Плюс это исключает/сокращает трудноуловимые ошибки - все могут ошибиться.
Также замечал, что, например, некоторые ("авторитетные" в программировании люди) после for () ставят {}, даже если можно без этого обойтись.
Почтальон
Модератор
311 / 237 / 38
Регистрация: 22.03.2015
Сообщений: 1,857
Завершенные тесты: 1
10.03.2016, 11:50     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #10
Цитата Сообщение от gunslinger Посмотреть сообщение
Также замечал, что, например, некоторые ("авторитетные" в программировании люди) после for () ставят {}, даже если можно без этого обойтись

Не по теме:

Ну это уже дело привычки

Lelik-pahan
10.03.2016, 16:55
  #11

Не по теме:

Для меня такой код трудночитаем:

Цитата Сообщение от Kvarcenar Посмотреть сообщение
C++
1
if (((Edit9 -> Text == "123") && (Edit9 -> Text == "123456")) ||  ((Edit9 -> Text == "12345") && (Edit9 -> Text == "123457")))
а тут всё понятно с первого взгляда:
C++
1
if (Edit9->Text == "123" && Edit8->Text == "123456" ||  Edit9->Text == "12345" && Edit8->Text == "123457")
Это как математическая формула. Можно записать так:
a * b + c * d
а можно так:
((a * b) + (c * d))
Только смысл? такая запись понятнее тем, кто только начал изучать действие "умножение" и не уверен, какую операцию нужно выполнять раньше.


Это дело привычки. Конечно пиши так, как тебе удобно. Но я уверен, что со временем ты сам придёшь к тому, что запись без лишних скобок удобней.

nick42
Практикантроп
4091 / 2125 / 194
Регистрация: 23.09.2011
Сообщений: 4,485
10.03.2016, 17:13     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #12
По моему тут нет "золотого" решения; я часто избегаю лишней писанины. В явных случаях, - когда мои "недомолвки" подправляет компилятор (или препроцессор) - стараюсь писать короче. Пример - Caption = 12345. Хотя корректнее, наверное, Caption = IntToStr(12345). Но бывает, что за такое пренебрежение точным стилем получаю "подзатыльники" в виде неверного результата. Толкового примера под рукой нет, но в основном это связано со сложными выражениями. И, вроде, по рангу мат.операций должно получиться нужное мне значение, а в результате - получаю не то, пока не "умащу" выражение кучей лишних на мой взгляд круглых скобок. Особенно, если в выражении присутствуют сдвиги, умножения и т.д.
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.03.2016, 21:40     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #13
Даешь лисп в плюсах!

За ради развлечения можно глянуть потроха dinkumware stl:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
template<class _FwdIt1,
    class _Diff2,
    class _Ty> inline
    _FwdIt1 _Search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
        _Diff2 _Count, const _Ty& _Val, random_access_iterator_tag)
    {   // find first _Count * _Val match, random-access iterators
    _DEBUG_RANGE(_First1, _Last1);
    _FwdIt1 _Mid1;
 
    if (_Count == 0)
        return (_First1);
 
    for (;; _First1 = ++_Mid1)
        {   // look for a long enough sequence
        _FwdIt1 _Oldfirst1 = _First1;
        _Diff2 _Count1 = _Count;
 
        for (;; _First1 += _Count)
            if (_First1 == _Last1)
                return (_Last1);    // end of sequence
            else if (*_First1 == _Val)
                break;  // found a match
            else if (_Last1 - _First1 < _Count)
                return (_Last1);    // not enough left for a match
 
        _Mid1 = _First1;
        if (_Oldfirst1 != _First1)
            for (++_Oldfirst1; _Oldfirst1 != _First1; --_First1, --_Count1)
                if (!(_First1[-1] == _Val))
                    break;  // found beginning of sequence
 
        for (;; )
            if (--_Count1 == 0)
                return (_First1);   // found last match
            else if (_Mid1 == _Last1 || !(*++_Mid1 == _Val))
                break;
        if (_Mid1 == _Last1)
            return (_Last1);
        }
    }
- буста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second))
    : BinaryFunction<
          Func
        , typename Func::result_type
        , typename Func::first_argument_type
        , typename Func::second_argument_type
      >
  {
      typedef typename Func::first_argument_type first_argument_type;
      typedef typename Func::second_argument_type second_argument_type;
      typedef typename Func::result_type result_type;
 
      ~AdaptableBinaryFunction()
      {
          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
          BOOST_CONCEPT_ASSERT((Convertible<First, first_argument_type>));
          BOOST_CONCEPT_ASSERT((Convertible<Second, second_argument_type>));
      }
  };
///////////////////////////////////////////////////////////////////////////////
template<typename T, typename C>
inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
end(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
{
    typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
        iterator(boost::end(derefof(auto_any_cast<type *, boost::mpl::false_>(col)))));
}
- и VCL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  BSTR __fastcall WideString::Copy(BSTR src)
  {
    return (src) ? ::SysAllocStringLen(src, ::SysStringLen(src)) : 0;
  }
///////////////////////////////////////////////////////////////////////////////
  static int UTF32ToUTF16(const char32_t* src, WideChar* dst, int len)
  {
    int count = 0;
    while ((len != 0) && *src) {
      char32_t ch = *src++;
      if (ch < 0x0000FFFF) {
        count++;
        if (dst)
          *dst++ = (ch & 0x0000FFFF);
      }
      else if (ch < 0x0010FFFF) {
        count += 2;
        if (dst) {
          ch -= 0x10000;
          *dst++ = (ch >> 10)  | 0xD800;
          *dst++ = (ch & 0x3FF)| 0xDC00;
        }
      } else {
        count++;
        if (dst)
          *dst++ = 0x0000FFFD;
      }
      if (len > 0)
        len--;
    }
    return count;
  }
Приглашаю страждущих заодно поплеваться на разработчиков библиотек. Плохие разработчики, плохие, а-та-та!))
pav1uxa
1773 / 1613 / 615
Регистрация: 23.01.2014
Сообщений: 5,818
Завершенные тесты: 1
10.03.2016, 22:13     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #14
Что-то в приведенных выше примерах не нашел особо громоздких условий в пределах одного оператора if, о которых в этой теме идет речь...

Цитата Сообщение от Kvarcenar Посмотреть сообщение
Ну, при отладке программы при раздуплении строки
C++
1
if (((Edit9 -> Text == "123") && (Edit9 -> Text == "123456")) ||  ((Edit9 -> Text == "12345") && (Edit9 -> Text == "123457")))
или
C++
1
if (Edit9->Text == "123" && Edit8->Text == "123456" ||  Edit9->Text == "12345" && Edit8->Text == "123457")
Если приводите примеры - то хотя бы приводите реальные. Оба условия можно просто заменить на
C++
1
if (false)
О чем тут говорить то.

Я к тому, что большинство таких ужасных на взгляд условий можно переписать куда короче и нагляднее. Тут речь уже даже не о скобках...
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.03.2016, 22:32     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #15
Цитата Сообщение от pav1uxa Посмотреть сообщение
Если приводите примеры - то хотя бы приводите реальные.
Тема вынесена из другой. Никто не ставил целью привести реальный или нереальный пример кода - обсуждение понеслось само собой.
Lelik-pahan
1138 / 709 / 63
Регистрация: 25.11.2009
Сообщений: 1,399
Завершенные тесты: 1
11.03.2016, 09:37     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #16
Цитата Сообщение от pav1uxa Посмотреть сообщение
Если приводите примеры - то хотя бы приводите реальные
Посмотри внимательно на второй пример. Когда я его писал, я убрал лишние скобки, лишние пробелы и в двух случаях заменил Edit9 на Edit8, так что его нельзя заменить на if (false)
hoggy
5989 / 2429 / 436
Регистрация: 15.11.2014
Сообщений: 5,382
Завершенные тесты: 1
12.03.2016, 17:35     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #17
Цитата Сообщение от gunslinger Посмотреть сообщение
В скобки условия можно заключать для дальнейшей поддержки кода, вдруг условия поменяются
плохой ход.

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

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

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

Цитата Сообщение от gunslinger Посмотреть сообщение
Плюс это исключает/сокращает трудноуловимые ошибки - все могут ошибиться.
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
Цитата Сообщение от BRcr Посмотреть сообщение
Приглашаю страждущих заодно поплеваться на разработчиков библиотек.
вполне себе годный код.
с чего там плеваться то?
gunslinger
случайный прохожий
1110 / 728 / 185
Регистрация: 20.07.2013
Сообщений: 1,995
13.03.2016, 01:36     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #18
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
"Запутался" в приоритете операций (сложное условие) и потом сидишь, голову ломаешь, почему результат не соответствует ожиданиям.
Лишние скобки, считаю, могут помочь в дальнейшей поддержке кода - люди разные бывают, не у всех "основы" запоминаются, как дважды два.
pav1uxa
1773 / 1613 / 615
Регистрация: 23.01.2014
Сообщений: 5,818
Завершенные тесты: 1
13.03.2016, 10:11     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" #19
По мне так "сложное условие" - это уже само по себе явление неверное, его не должно существовать. Ну не бывает в реальном коде вот таких трехэтажных условий. Его разделяют на несколько простых. Иначе как Вы вообще его дебажить будете? Экономия строк в коде еще никогда никому не помогала.

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

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

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

Или воспользуйтесь поиском по форуму:
hoggy
5989 / 2429 / 436
Регистрация: 15.11.2014
Сообщений: 5,382
Завершенные тесты: 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();
Yandex
Объявления
13.03.2016, 14:05     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
Ответ Создать тему
Опции темы

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