Должен ли я использовать скобки в логических утверждениях, даже если это не нужно?

100

Допустим, у меня есть логическое условие, a AND b OR c AND dи я использую язык, в котором ANDпрецедент операции выше, чем OR. Я мог бы написать эту строку кода:

If (a AND b) OR (c AND d) Then ...

Но на самом деле это эквивалентно:

If a AND b OR c AND d Then ...

Есть ли аргументы за или против включения лишних скобок? Практический опыт подсказывает, что стоит включить их для удобства чтения? Или это признак того, что разработчик должен действительно сесть и стать уверенным в основах своего языка?

Джефф Бриджман
источник
90
Я могу быть ленивым, но я предпочитаю иметь круглые скобки в большинстве таких ситуаций для удобства чтения.
Торстен Мюллер
6
Я тоже. Я просто надеюсь, что делаю это больше для удобства чтения и меньше, потому что я слишком ленив, чтобы стать уверенным / компетентным в основах моего языка.
Джефф Бриджман
16
Хорошее использование скобок похоже на хорошее использование грамматики. 2 * 3 + 2может быть так же, как, (2 * 3) + 2но второй легче читать.
Reactgular
16
@ Мэтью Может быть, если ты слаб в математике. Для более сложных случаев обязательно используйте скобки. Но для ослепительно очевидных (BODMAS ...) они снижают читабельность больше, чем помогают из-за беспорядка.
Конрад Рудольф
3
Тем не менее, тот же приоритет AND / OR имеет место в Basic, Python, SQL ... у меня сложилось впечатление, что это правило в подавляющем большинстве современных языков (хотя и не во всех).
Тим Гудман

Ответы:

118

Хорошие разработчики стремятся написать понятный и правильный код . Скобки в условных выражениях, даже если они не являются строго обязательными, помогают в обоих случаях.

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

  • Они сокращают работу, необходимую для понимания кода.
  • Они предоставляют подтверждение намерений разработчика.

Кроме того, дополнительные скобки, такие как отступы, пробелы и другие стандарты стиля, помогают визуально организовать код логическим способом.

Что касается правильности , то условия без скобок - это рецепт для глупых ошибок. Когда они случаются, они могут быть ошибками, которые трудно найти - потому что часто неправильное условие будет вести себя правильно большую часть времени, и только изредка терпит неудачу.

И даже если вы поймете это правильно, следующий человек, который будет работать над вашим кодом, может и не добавлять ошибки в выражение или неправильно понимать вашу логику и, следовательно, добавлять ошибки в другом месте (как справедливо указывает LarsH).

Я всегда использую скобки для выражений, которые объединяются andи or(а также для арифметических операций с аналогичными проблемами приоритета).

user82096
источник
3
Хотя я слышал, что комментарии - это извинения (за плохой / трудно читаемый код) ... есть большая вероятность, что вы могли бы написать это лучше. Я думаю, вы могли бы сказать то же самое о скобках.
Джефф Бриджман
6
Другим аспектом правильности является сохранение его с помощью изменений: хотя первоначальный разработчик может получить приоритет прямо без скобок, когда он впервые пишет код с новой целью и контекстом, он (или другой), который приходит позже и не помнит все детали могут испортить это, когда они добавят больше выражений в выражение. (Это в основном уже подразумевалось, но я чувствовал, что это стоит подчеркнуть.)
LarsH
1
@LarsH, спасибо, я добавил это явно в ответ.
8
+1 «Они подтверждают намерения разработчика.» - любой программист (хорошо, может быть, не все, но все те, кто находится здесь ...) может понять, что компилятор будет делать с самой сложной логикой. Абсолютно никто не может работать, что первоначальный разработчик предназначен ( в том числе себя) несколько недель вниз по дорожке для ничего , кроме простейшего .....
mattnz
2
Я думаю, что @JeffBridgman ссылался на довольно известную точку зрения: «комментарии иногда могут быть запахом кода». Например, см . Резюме Джеффа Этвуда, которое включает вопрос «Можете ли вы изменить код, чтобы комментарии не требовались?». Я бы сказал, что если ваш комментарий объясняет, почему ваш код чертовски не интуитивен, это может быть намек на то, что что-то не так. В такие моменты хорошей идеей является упрощение кода. Я полностью согласен с вашим реальным ответом, хотя и взять скобки, однако.
Даниэль Б,
94

Не имеет значения, уверены ли вы в своем понимании языка. Что более важно, так это понимание языка n00b, который следует за вами.

Напишите свой код наиболее понятным и понятным способом. Дополнительные скобки часто (но не всегда) помогают. Помещение одной строки в строку часто помогает. Часто помогает последовательность в стиле кодирования.

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

Dan Pichelman
источник
72
Не забывайте об этом, даже если вы являетесь сольным разработчиком, когда заболели, устали или имеете дело с кодом, который вы написали в прошлом году; Ваш уровень понимания уменьшен до уровня n00b.
Дэн Нили,
30
There is such a thing as too many parenthesis- ты явно не шучу;)
Пол
18
Это плохой совет: не пиши для нубов. Это снизит качество вашего кода (значительно), потому что вы не можете использовать устоявшиеся идиомы, которые выходят за рамки первых двух глав книги для начинающих.
Конрад Рудольф
10
@KonradRudolph: может быть и так, но не пишите только для тех парней, которые знают искусство компьютерного программирования от корки до корки, или же готовы быть готовы к отладке своего кода впоследствии, и не понимают, почему вы так поступили , Код читается намного больше, чем написано.
Хайлем
15
@dodgethesteamroller: я видел, что слишком много компетентных / уважаемых разработчиков вводили ошибки предшествования (у каждого плохой день от времени), которые остаются незамеченными целую вечность. Для хороших разработчиков, которые знают правила предшествования, риск необнаруженных ошибок / опечаток слишком высок. Для всех остальных риск выше. Лучшие разработчики - это разработчики, которые раньше запоминали правила приоритетов языка, но забывали их из-за привычного использования скобок для чего-то неочевидного.
Брендан
32

да

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

Реальная причина мира

Я унаследовал приложение основного кадра. Однажды, из чистого синего это перестало работать. Вот и все ... Боже, он просто остановился.

Моя работа состояла в том, чтобы заставить его работать как можно быстрее. Исходный код не изменялся в течение двух лет, но внезапно он просто прекратился. Я попытался скомпилировать код, и он разбился на строке XX. Я посмотрел на строку XX, и я не мог сказать, что заставит линию XX разорваться. Я попросил подробные спецификации для этого приложения, и не было ни одного. Линия XX не была виновником.

Я распечатал код и начал просматривать его сверху вниз. Я начал создавать блок-схему того, что происходило. Код был настолько запутанным, что я едва мог понять его. Я бросил пытаться построить блок-схему. Я боялся вносить изменения, не зная, как это изменение повлияет на остальную часть процесса, тем более что у меня не было подробностей о том, что приложение делало или где оно находилось в цепочке зависимостей.

Итак, я решил начать с верхней части исходного кода и добавить whitespce и линейные тормоза, чтобы сделать код более читабельным. Я заметил, что в некоторых случаях были условия, которые объединялись, ANDи ORне было четкого различия между тем, какие данные ANDредактировались и какие данные ORредактировались. Поэтому я начал ставить круглые скобки вокруг условий ANDи ORусловий, чтобы сделать их более читабельными.

Когда я медленно спускался, убирая это, я периодически сохранял свою работу. Однажды я попытался скомпилировать код, и случилось нечто странное. Ошибка перепрыгнула через исходную строку кода и теперь была еще ниже. Поэтому я продолжал, speparating ANDи ORусловие с круглыми скобками. Когда я закончил убирать это, это сработало. Пойди пойди

Затем я решил посетить операционную мастерскую и спросить их, устанавливали ли они недавно какие-либо новые компоненты на основной раме. Они сказали да, мы недавно обновили компилятор. Хммм.

Оказывается, старый компилятор вычислял выражение слева направо независимо. Новая версия компилятора также оценивала выражения слева направо, но неоднозначный код, что означало неясное сочетание ANDи ORне могло быть разрешено.

Урок, который я извлек из этого ... ВСЕГДА, ВСЕГДА, ВСЕГДА используйте парены для разделения ANDусловий и ORусловий, когда они используются в сочетании друг с другом.

Упрощенный пример

IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...(код завален несколькими из них)

Это упрощенная версия того, с чем я столкнулся. Были еще условия с составными логическими утверждениями.

Я помню, как это повлияло на:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...



Я не мог переписать его, потому что не было никаких спецификаций. Первоначальный автор давно ушел. Я помню сильное давление. Весь грузовой корабль оказался в порту и не мог быть выгружен, потому что эта маленькая программа не работала. Нет предупреждения Без изменений в исходном коде. Меня осенило только спросить Сетевые Операции, изменили ли они что-нибудь, после того, как я заметил, что добавление паренсов сместило ошибки

Майкл Райли - AKA Gunny
источник
22
Это кажется лучшей иллюстрацией того, почему так важно иметь хороший компилятор.
Руах
6
@CapeCodGunny: я уверен, что ты не сделал. Но проблема здесь в том, что у вас был плохой поставщик компиляторов, который сделал решающее изменение. Я не понимаю, как вы выучили урок «ВСЕГДА, ВСЕГДА, ВСЕГДА» обходить эту проблему, даже при использовании лучших компиляторов.
Руах
5
@ruakh - Нет, продавец просто изменил свой парсер кода. Я старая школа, я не полагаюсь на свою способность запоминать каждую систему, в которой я кодировался или участвовал. Без документации все, что у вас есть, это исходный код. Когда исходный код трудно читать и следовать, он создает чрезвычайно стрессовую ситуацию. Программистам, которые не используют пробелы, вероятно, никогда не приходилось сталкиваться с такой ситуацией, с которой я столкнулся. Я также узнал, что имеет больше смысла писать такой код: см. Дик; Смотри Джейн; Смотрите Дик и Джейн; Простые утверждения, которые легко читать ... комментировать ... и следовать.
Майкл Райли - AKA Gunny
2
Отличная история, но я согласен, что это не повод использовать круглые скобки. и / или приоритетность почти универсальна и о наименее вероятной вещи, которую можно изменить. Если вы не можете полагаться на непротиворечивое поведение для такой стандартной, базовой операции, ваш компилятор является мусором, и вы будете зависать независимо от того, что вы делаете. Ваша история - это 100% проблема компилятора и 0% проблема кода. Особенно с учетом того, что стандартным поведением было простое вычисление слева направо - порядок всегда будет понятен, так зачем кому-то использовать круглые скобки?
7
Я думаю, что здесь есть уроки, извлеченные здесь с обеих сторон ... Вам лучше использовать круглые скобки, особенно когда альтернатива полагается на недокументированное поведение компилятора в отношении неоднозначного кода . И если программист не знает, какие выражения неоднозначны, лучше использовать паренсы. С другой стороны, опасно менять поведение компилятора, но, по крайней мере, оно выдает ошибку в тех случаях, когда поведение меняется. Было бы хуже, если бы компилятор не выдал ошибку, а начал компилировать иначе. Ошибка защитила вас от незаметных ошибок.
LarsH
18

Да, если есть смешанные «и» и «или».

Также хорошая идея для (), что логически одна проверка.

Хотя лучше всего использовать хорошо известные функции предикатов и исключать большинство проверок и условий, оставляя их простыми и удобочитаемыми.

Балог Пал
источник
6
Правда, есть очень хороший шанс, a AND bвероятно, следует заменить либо функцией, либо предварительно рассчитанным значением boolen, которое имеет более описательное имя.
Джефф Бриджман
14

Скобки семантически избыточны, так что компилятору все равно, но это красная сельдь - реальная проблема - читаемость и понимание программистом.

Я собираюсь занять здесь радикальную позицию и дать сердечное «нет» скобкам a AND b OR c AND d. Каждый программист должен наизусть знать, что приоритет в булевых выражениях идет НЕ> И> ИЛИ , точно так же, как вспоминать « Пожалуйста, простите мою дорогую тетю Салли за алгебраические выражения» Избыточная пунктуация просто добавляет визуальный беспорядок в коде большую часть времени без пользы для читаемости программиста.

Кроме того, если вы всегда используете круглые скобки в логических и алгебраических выражениях, то вы отказываетесь от возможности использовать их в качестве маркера для «чего-то хитрого, что происходит здесь - берегитесь!» То есть в тех случаях, когда вы хотите переопределить приоритет по умолчанию и вычислить сложение перед умножением или OR перед AND, круглые скобки - это приятный красный флаг для следующего программиста. Слишком много пользы от них, когда они не нужны, и ты становишься Мальчиком, который плакал.

Я бы сделал исключение для чего-либо за пределами области алгебры (булево или нет), такого как выражения указателя в C, где что-либо более сложное, чем стандартные идиомы, такие как *p++или, p = p->nextвероятно, должно быть заключено в скобки, чтобы сохранить разыменование и арифметику прямыми. И, конечно, все это не относится к языкам, таким как Lisp, Forth или Smalltalk, которые используют некоторую форму польской нотации для выражений; но для большинства основных языков логический и арифметический приоритет полностью стандартизирован.

dodgethesteamroller
источник
1
+1, круглые скобки для ясности это хорошо, но ANDпротив ORявляется довольно простой случай , который я хочу , чтобы другие разработчики на моей команде , чтобы знать. Я беспокоюсь о том, что иногда «использование скобок для ясности» на самом деле означает «использование скобок, поэтому мне никогда не нужно беспокоиться, чтобы узнать приоритет».
Тим Гудман
1
Во всех языках я работаю регулярно это , .memberпрежде унарные операторы, унарные перед тем бинарные операторы, *и /до того, +и -до того, <и >и ==прежде , чем &&до того, ||прежде чем назначение. Эти правила легко запомнить, потому что они соответствуют моему «здравому смыслу» о том, как обычно используются операторы (например, вы не дадите ==больший приоритет, чем +или 1 + 1 == 2перестаете работать), и они охватывают 95% вопросов, которые у меня возникнут ,
Тим Гудман
4
@TimGoodman Да, совершенно верно, оба ваших комментария. Другие респонденты здесь, кажется, думают, что это черный или белый вопрос - либо используйте круглые скобки все время, без исключений, либо неосторожно пролетите мимо штанов через море произвольных и запоминающихся правил, ваш код кипит с потенциальными трудно обнаруживаемыми ошибками. (Смешанные метафоры очень намеренные.) Очевидно, что правильный путь - это умеренность; ясность кода важна, но вы должны хорошо знать свои инструменты, и вы должны иметь возможность ожидать определенного минимального понимания принципов программирования и CS от своих товарищей по команде.
dodgethesteamroller
8

Как я вижу это:

ДА Плюсы:

  • Порядок операций явный.
  • Защищает вас от будущих разработчиков, которые не понимают порядок операций.

ДА Минусы:

  • Может привести к загромождению, сложному для чтения коду

НЕТ Плюсы:

  • ?

НЕТ Минусов:

  • Порядок операций неявный
  • Код менее понятен для разработчиков без хорошего понимания порядка операций.
MetaFight
источник
Хорошо сказано, хотя я думаю, что «может привести к беспорядочному, трудно читаемому коду» , довольно субъективно.
FrustratedWithFormsDesigner
2
Как сделать семантику вашего кода явным затруднительным для чтения?
Мейсон Уилер
1
Я согласен с другими в вопросе ваших «да минусов». Я думаю, что это почти всегда наоборот.
@ Разочарованный Как субъективный, как противоположное утверждение. Значит, совсем нет, правда. Просто сложно измерить.
Конрад Рудольф
1
@MasonWheeler: Хотя я согласен с тем, что явные парени очень важны во многих случаях, я могу понять, как можно переборщить с явной семантикой. Мне 3 * a^2 + 2 * b^2легче читать, чем (3 * (a^2)) + (2 * (b^2)), потому что формат и приоритет знакомы и стандартны. Точно так же вы можете (быть крайне) запретить использование функций и макросов (или компиляторов!), Чтобы сделать семантику вашего кода более явной. Очевидно, я не защищаю это, но я надеюсь ответить на ваш вопрос о том, почему должны быть ограничения (баланс) для того, чтобы сделать вещи явными.
LarsH
3

Есть ли аргументы за или против включения лишних скобок? Практический опыт подсказывает, что стоит включить их для удобства чтения? Или это признак того, что разработчик должен действительно сесть и стать уверенным в основах своего языка?

Если бы никому больше не пришлось снова просматривать мой код, я не думаю, что мне было бы все равно.

Но из моего опыта:

  • Иногда я снова смотрю на свой код (иногда спустя годы после его написания)
  • Другие иногда смотрят на мой код
    • Или даже расширить / исправить это!
  • Ни я, ни другой не помнят точно, о чем я думал, когда писал это.
  • Написание загадочного кода «минимизировать количество символов» ухудшает читабельность

Я почти всегда так делаю, потому что доверяю своей способности быстро читать и не совершать небольших ошибок с паренами больше, чем ничего другого.

В вашем случае я бы почти наверняка сделал что-то вроде:

if (a AND b) then ab = true
if (c AND d) then cd = true
If (ab OR cd) Then ...

Да, это больше кода. Да, вместо этого я могу использовать модных операторов bool. Нет, мне не нравится, когда в будущем я буду читать код более 1 года, я неправильно понимаю причудливых операторов bool. Что если бы я писал код на языке, который имел другой приоритет И / ИЛИ и должен был вернуться назад, чтобы это исправить? Собираюсь ли я идти: «Ага! Я помню эту умную маленькую вещь, которую я сделал! Мне не нужно было включать парены, когда я писал это в прошлом году, хорошо, что я помню сейчас!» если это произойдет (или, что еще хуже, кто-то еще, кто не знал об этой хитрости или попал в ситуацию типа «как можно скорее»)?

Разделение с помощью () делает намного более простым быстрое изучение и понимание позже ...

enderland
источник
7
Если вы собираетесь это сделать, почему бы и нет ab = a AND b?
Эрик
1
Возможно, потому что abостанется неизменным, если нет a AND b.
Армали
3

Общий случай

В C # умножение и деление имеет приоритет над сложением и вычитанием.

Тем не менее, StyleCop, инструмент, который обеспечивает общий стиль для всей кодовой базы с дополнительной целью снизить риск ошибок, связанных с кодом, который может быть недостаточно понятным, имеет правило SA1407 . Это правило будет выдавать предупреждение с таким фрагментом кода:

var a = 1 + 2 * 3;

Понятно, что результат есть 7и нет 9, но все же StyleCop предлагает поставить круглые скобки:

var a = 1 + (2 * 3);

Ваш конкретный случай

В вашем конкретном случае есть приоритет И по сравнению с ИЛИ в конкретном языке, который вы используете.

Это не то, как ведут себя все языки. Многие другие одинаково относятся к И и ИЛИ.

Как разработчик, который работает в основном с C #, когда я впервые увидел ваш вопрос и прочитал фрагмент кода, не читая того, что вы написали ранее, у меня было первое искушение прокомментировать, что эти два выражения не совпадают. Надеюсь, я полностью прочитал весь вопрос, прежде чем комментировать.

Эта особенность и риск того, что некоторые разработчики могут поверить, что AND и OR имеют одинаковый приоритет, делает еще более важным добавление скобок.

Не пишите код с целью показать, что вы умны. Пишите код с целью удобочитаемости, в том числе людьми, которые могут быть не знакомы со всеми аспектами языка.

Арсений Мурзенко
источник
1
«Это очень редко»: согласно Stroustrup2013, C ++ 11, кажется, имеет разный приоритет над AND и OR (стр. 257). То же самое для Python: docs.python.org/2/reference/expressions.html
Дирк
10
Re: «Каждый язык, который я знаю, относится к И и ИЛИ одинаково»: Я сомневаюсь, что это правда. Если это так, то вы не знаете , любой из десяти наиболее популярных языков (C, Java, C ++, PHP, JavaScript, Python, C #, Perl, SQL, и Ruby), и не в состоянии быть комментируя что является "необычным", не говоря уже о "очень необычном".
Руах
1
Я согласен с ruakh и искал его для C ++ 11, python, matlab и java.
Дирк
3
Языки, в которых AND и OR являются бинарными операторами, и которые не рассматривают AND как имеющий более высокий приоритет, чем OR, являются бессмысленным дерьмом, авторами которых являются лакомства по информатике. Это происходит из логической записи. Здравствуйте, «сумма продуктов» ничего не значит? Есть даже логическая запись, которая использует умножение (сопоставление факторов) для AND и символ + для OR.
Каз
3
@ruakh Вы только что сделали мою точку зрения для меня. Поскольку существует несколько патологических крайних случаев, это не означает, что вы не должны изучать стандартный логический приоритет и предполагать, что он имеет место, пока не доказано обратное. Мы не говорим о произвольных дизайнерских решениях здесь; Булева алгебра была изобретена задолго до компьютеров. Кроме того, покажи мне спецификацию Паскаля, о которой ты говоришь. Здесь и здесь показывают И до ИЛИ.
dodgethesteamroller
1

Как все говорили, используйте круглые скобки каждый раз, когда это делает выражение более читабельным. Однако, если выражение сложное, я бы посоветовал ввести новые функции для подвыражений .

Хонза Брабек
источник
0

Или это признак того, что разработчик должен действительно сесть и стать уверенным в основах своего языка?

Если вы строго используете язык в единственном числе, может быть. Теперь возьмите все языки, которые вы знаете, от старых до самых современных, от скомпилированных до написания сценариев, до SQL, к вашему собственному DSL, который вы изобрели в прошлом месяце.

Вы помните точные правила приоритета для каждого из этих языков, не глядя?

Безопасный
источник
1
И как заметил выше @Cape Cod Gunny, даже если вы думаете, что знаете холодный язык, компилятор / время выполнения могут измениться ниже вас.
Иордания
0

«Должен ли я использовать круглые скобки в логических утверждениях, даже если в этом нет необходимости».

Да, потому что два человека найдут их полезными:

  • Следующий программист, чьи знания, компетенция или стиль могут отличаться

  • Будущее за вами, кто вернется к этому коду на более поздний срок!

Майкл Даррант
источник
-1

Сложные условные обозначения - это «булева алгебра», которую вы пишете в некотором роде, что делает ее почти такой же, как алгебра, и вы определенно использовали бы парены для алгебры , не так ли?

По-настоящему полезными являются правила отрицания:

!(A || B) <=> !A && !B
!(A && B) <=> !A || !B

Или в более понятном формате:

!(A + B) <=> !A * !B
!(A * B) <=> !A + !B

который действительно ясно просто алгебра, когда написано как:

-1*(A + B) = -A + -B
-1*(A * B) = -A * -B

Но мы также можем применить мышление для алгебраического упрощения и расширения:

(A && B) || (C && D) => 
((A && B) || C) && ((A && B) || D) => 
(AC && BC) && (AD && BD) =>
AC && BC && AD && BD

хотя в коде вы должны написать:

(A||C) && (B||C) && (A||D) && (B||D)

или, в более ясном формате:

(A + B) * (C + D) => 
((A + B) * C) + ((A + B) * D) => 
(AC + BC) + (AD + BD) =>
AC + BC + AD + BD

По сути, условное выражение по-прежнему является просто алгебраическим выражением, и, четко используя круглые скобки, вы можете с легкостью применять различные алгебраические правила, которые вы уже знаете, к выражению, включая устаревшее понятие «упростить или расширить эту формулу».

Narfanator
источник
2
Я не уверен, что вы на самом деле отвечаете на вопрос, поскольку приводите свой ответ с предположением, которое не обязательно соответствует действительности. Буду ли я использовать скобки для алгебры? Не всегда. Если это помогает с удобочитаемостью, то, конечно, но другие уже выразили это здесь. И расширение математической алгебры в другие формы не имеет однозначного соответствия программированию - что если вы проверяете состояние нескольких строковых значений?
Дерек
Если соответствующая булева алгебра достаточно сложна для того, чтобы оправдать паренов, ваш условный партнер, вероятно, должен использовать парены. Если это достаточно просто, чтобы не требовать прощения, вы либо не должны, либо не должны. В любом случае, думая об этом, как о математическом выражении, вы, вероятно, проясните проблему.
Нарфанатор
В моих примерах выше используются два и четыре логических значения. Если вы проверяете состояние двух или более строковых значений, оно сопоставляется. Каждая проверка соответствует одной булевой переменной; независимо от того, является ли эта проверка целочисленным или равенством строк; включение строки, массива или хеша; само сложное выражение ... не имеет значения; все, что имеет значение, это то, что у вас есть более одного измерения истинности / ложности в вашем выражении.
Нарфанатор
2
Просто придирки, но !(A + B) <=> !A + !Bи -1*(A + B) = -A + -Bне должен оператор был переворачивается от +к *во втором выражении?
Джефф Бриджман
-1

Я буду использовать круглые скобки, даже если это не обязательно, потому что это помогает лучше понять для всех, для того, кто пишет код, а также для того, кто готов увидеть этот код. В вашем случае даже булевы операторы имеют приоритет, поначалу это может хорошо работать, но мы не можем сказать, что это поможет вам в каждом случае. поэтому я предпочитаю использовать круглые скобки в любых условиях, когда это может потребоваться или по желанию.

синга сельва санкар
источник
-1

Да. Вы должны использовать в любом случае, когда вы чувствуете, что ваш код будет более понятным. Помните, что ваш код должен быть достаточно понятным, чтобы другие могли понять, не читая ваши комментарии внутри кода. Поэтому хорошей практикой является использование скобок и скобок. Также имейте в виду, что это может зависеть от конкретной практики вашей компании / команды. Просто придерживайтесь одного подхода и не смешивайте.

DeveloperArnab
источник