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

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

05.03.2016, 23:27. Показов 1620. Ответов 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
 Аватар для Lelik-pahan
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
09.03.2016, 19:45
Цитата Сообщение от Kvarcenar Посмотреть сообщение
if ((Edit9 -> Text) == "123") || (Edit9->Text == "12345"))
только со скобками беда. На три открывающие приходится четыре закрывающих. При том, что нужна всего-то одна пара, обрамляющая всё условие целиком.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33149 / 21441 / 8223
Регистрация: 22.10.2011
Сообщений: 36,771
Записей в блоге: 9
09.03.2016, 19:55
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
При том, что нужна всего-то одна пара, обрамляющая всё условие целиком.
Ну, для того, чтобы это осознать, нужно же познакомиться с приоритетом операций, а кому это интересно?
0
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
09.03.2016, 21:02  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Ну, для того, чтобы это осознать, нужно же познакомиться с приоритетом операций, а кому это интересно?
Ой, да ладно! ))) Одна закрывающая после "Edit9 -> Text" лишняя... Очепятка... А операции беру в скобки, потому что так удобнее и читабельнее!
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
09.03.2016, 21:06
Цитата Сообщение от Kvarcenar Посмотреть сообщение
А операции беру в скобки, потому что так удобнее и читабельнее!
Ошибочно так полагать. По той простой причине - скобки нужны для логики работы программы, т.е. для приоритетов исполнения, а не для того, что это удобно или читабельно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33149 / 21441 / 8223
Регистрация: 22.10.2011
Сообщений: 36,771
Записей в блоге: 9
09.03.2016, 21:15
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Очепятка...
Не брал бы в скобки - не было бы очепяток.
Цитата Сообщение от Kvarcenar Посмотреть сообщение
потому что так удобнее и читабельнее
Попробуй Лисп изучать. С такой любовью к скобкам - тебе понравится.
0
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
09.03.2016, 21:15  [ТС]
Цитата Сообщение от Почтальон Посмотреть сообщение
скобки нужны для логики работы программы, т.е. для приоритетов исполнения, а не для того, что это удобно или читабельно.
В смысле? Ну, при отладке программы при раздуплении строки
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")))
Или Вы хотите сказать, что в откомпилированном виде первый вариант будет исполняться быстрее второго? )))
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
09.03.2016, 21:19
Цитата Сообщение от Kvarcenar Посмотреть сообщение
Или Вы хотите сказать, что в откомпилированном виде первый вариант будет исполняться быстрее второго?
Нет, я хочу сказать что: "Казнить нельзя помиловать"
0
place status here
 Аватар для gunslinger
3180 / 2209 / 640
Регистрация: 20.07.2013
Сообщений: 5,908
10.03.2016, 01:53
В скобки условия можно заключать для дальнейшей поддержки кода, вдруг условия поменяются, а с ними и приоритет. Плюс это исключает/сокращает трудноуловимые ошибки - все могут ошибиться.
Также замечал, что, например, некоторые ("авторитетные" в программировании люди) после for () ставят {}, даже если можно без этого обойтись.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
10.03.2016, 11:50
Цитата Сообщение от gunslinger Посмотреть сообщение
Также замечал, что, например, некоторые ("авторитетные" в программировании люди) после for () ставят {}, даже если можно без этого обойтись

Не по теме:

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

0
10.03.2016, 16:55

Не по теме:

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

Цитата Сообщение от 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))
Только смысл? такая запись понятнее тем, кто только начал изучать действие "умножение" и не уверен, какую операцию нужно выполнять раньше.


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

0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.03.2016, 17:13
По моему тут нет "золотого" решения; я часто избегаю лишней писанины. В явных случаях, - когда мои "недомолвки" подправляет компилятор (или препроцессор) - стараюсь писать короче. Пример - Caption = 12345. Хотя корректнее, наверное, Caption = IntToStr(12345). Но бывает, что за такое пренебрежение точным стилем получаю "подзатыльники" в виде неверного результата. Толкового примера под рукой нет, но в основном это связано со сложными выражениями. И, вроде, по рангу мат.операций должно получиться нужное мне значение, а в результате - получаю не то, пока не "умащу" выражение кучей лишних на мой взгляд круглых скобок. Особенно, если в выражении присутствуют сдвиги, умножения и т.д.
2
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.03.2016, 21:40
Даешь лисп в плюсах!

За ради развлечения можно глянуть потроха 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;
  }
Приглашаю страждущих заодно поплеваться на разработчиков библиотек. Плохие разработчики, плохие, а-та-та!))
1
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
10.03.2016, 22:13
Что-то в приведенных выше примерах не нашел особо громоздких условий в пределах одного оператора 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)
О чем тут говорить то.

Я к тому, что большинство таких ужасных на взгляд условий можно переписать куда короче и нагляднее. Тут речь уже даже не о скобках...
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.03.2016, 22:32
Цитата Сообщение от pav1uxa Посмотреть сообщение
Если приводите примеры - то хотя бы приводите реальные.
Тема вынесена из другой. Никто не ставил целью привести реальный или нереальный пример кода - обсуждение понеслось само собой.
0
 Аватар для Lelik-pahan
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
11.03.2016, 09:37
Цитата Сообщение от pav1uxa Посмотреть сообщение
Если приводите примеры - то хотя бы приводите реальные
Посмотри внимательно на второй пример. Когда я его писал, я убрал лишние скобки, лишние пробелы и в двух случаях заменил Edit9 на Edit8, так что его нельзя заменить на if (false)
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.03.2016, 17:35
Цитата Сообщение от gunslinger Посмотреть сообщение
В скобки условия можно заключать для дальнейшей поддержки кода, вдруг условия поменяются
плохой ход.

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

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

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

Цитата Сообщение от gunslinger Посмотреть сообщение
Плюс это исключает/сокращает трудноуловимые ошибки - все могут ошибиться.
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
Цитата Сообщение от BRcr Посмотреть сообщение
Приглашаю страждущих заодно поплеваться на разработчиков библиотек.
вполне себе годный код.
с чего там плеваться то?
0
place status here
 Аватар для gunslinger
3180 / 2209 / 640
Регистрация: 20.07.2013
Сообщений: 5,908
13.03.2016, 01:36
приведите пример ошибки,
которая не будет выявлена на первом же прогоне тестов.
"Запутался" в приоритете операций (сложное условие) и потом сидишь, голову ломаешь, почему результат не соответствует ожиданиям.
Лишние скобки, считаю, могут помочь в дальнейшей поддержке кода - люди разные бывают, не у всех "основы" запоминаются, как дважды два.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
13.03.2016, 10:11
По мне так "сложное условие" - это уже само по себе явление неверное, его не должно существовать. Ну не бывает в реальном коде вот таких трехэтажных условий. Его разделяют на несколько простых. Иначе как Вы вообще его дебажить будете? Экономия строк в коде еще никогда никому не помогала.

А приведенное в теме сравнение со строками так это вообще что-то с чем-то. Ну не будет такого в практическом коде никогда...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
13.03.2016, 14:05
Цитата Сообщение от gunslinger Посмотреть сообщение
"Запутался" в приоритете операций (сложное условие) и потом сидишь, голову ломаешь, почему результат не соответствует ожиданиям.
это не есть ответ на мой вопрос.

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

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

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

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

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

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

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

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

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

C++
1
2
if ( A && B && C && D && !E)
    somehing();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2016, 14:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »