Чи слід використовувати дужки в логічних висловлюваннях, навіть якщо це не потрібно?


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
Я можу бути ледачим, але я вважаю за краще мати дужки в більшості таких ситуацій для читабельності.
thorsten müller

6
Я також. Я просто сподіваюсь, що я роблю це більше для читабельності та менше, тому що я занадто ледачий, щоб стати впевненим / компетентним в основах моєї мови.
Джефф Брідгман

16
Гарне використання дужок - це як граматичне використання. 2 * 3 + 2Можливо, те саме, що (2 * 3) + 2і друге, простіше читати.
Реакційний

16
@Mathew Можливо, якщо ти слабкий у математиці. Для складніших випадків обов'язково використовуйте дужки. Але для сліпо очевидних (BODMAS…) вони зменшують читабельність більше, ніж сприяють їй через безлад.
Конрад Рудольф

3
Однак, той самий пріоритет AND / OR має місце в Basic, Python, SQL ... моє враження, що це правило в переважній більшості сучасних мов (хоча і не у всіх).
Тім Гудмен

Відповіді:


117

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

Що стосується ясності , подумайте про дужки як коментарі в коді: вони не є строго необхідними, і теоретично грамотний розробник повинен мати можливість з'ясувати код без них. І все-таки ці підказки надзвичайно корисні, адже:

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

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

Що стосується правильності , умови без дужок - це рецепт дурних помилок. Коли вони трапляються, вони можуть бути помилками, які важко знайти - адже часто неправильний стан більшість часу буде вести себе правильно і лише зрідка виходить з ладу.

І навіть якщо ви правильно це зробите, наступна особа, яка працює над вашим кодом, може не робити, або додаючи помилки до виразу, або неправильно розуміючи вашу логіку і тим самим додаючи помилки в іншому місці (як справедливо вказує LarsH).

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


3
Хоча, я чув, що кажуть, що коментарі - це вибачення (за поганий / важкий для читання код) ... є хороший шанс, що ти міг би написати це краще. Я думаю, ви могли б сказати подібне про дужки.
Джефф Брідгман

6
Інший аспект коректності - це збереження його за допомогою змін: Хоча оригінальний розробник може отримати перевагу правильно без дужок, коли він вперше записує код із ціллю та контекстом, свіжим на увазі, він (або інший), який приходить пізніше і не пам’ятає всіх деталі цілком можуть зіпсувати це, коли вони додають більше виразів до виразу. (Це здебільшого малося на увазі, але я відчував, що це варто наголосити.)
LarsH

1
@LarsH, дякую, я це явно додав у відповідь.

8
+1 "Вони надають підтвердження наміру розробника." - будь-який програміст (добре, можливо, не всі, але всі ті, хто тут проживає ....) можуть розробити, що буде робити компілятор за найскладнішою логікою. Абсолютно ніхто не може розробити те, що задумав оригінальний розробник (включаючи самого себе) за кілька тижнів вниз по
трассі

2
Я думаю, що @JeffBridgman посилався на досить відому позицію "коментарі іноді можуть мати запах коду". Наприклад, див . Підсумок Джеффа Етвуда, який включає питання "Чи можете ви перефактурувати код, щоб коментарі не потрібні?". Я б заперечував, що якщо ваш коментар пояснює, чому ваш код настільки проклятий неінтуїтивно зрозумілим, це, безумовно, може бути натяком на те, що щось не так. У подібні моменти корисно спростити код. Я повністю погоджуюся з вашою реальною відповіддю, проте, і беруться на дужки, проте.
Даніель Б

94

Не менш важливо, чи ви впевнені в розумінні мови. Найважливіше - зрозуміти мову n00b, яка йде за вами.

Напишіть свій код найяснішим, однозначним способом. Додаткові дужки часто (але не завжди) допомагають. Поставлення лише одного твердження на рядок часто допомагає. Послідовність стилю кодування часто допомагає.

Існує таке поняття, як занадто багато дужок, але це одна з тих ситуацій, коли вам не знадобиться порада - ви це дізнаєтесь, коли побачите. У цей момент рефактор вашого коду зменшує складність оператора, а не видаляє дужки.


72
Не забувайте, що навіть якщо ви соло-розробник, коли хворий, стомлений або маєте справу з кодом, про який ви писали минулого року; рівень вашого розуміння знижується до рівня n00b.
Ден Нілі

30
There is such a thing as too many parenthesis- Ви , очевидно , НЕ Lisper;)
Поль

18
Це погана порада: не пишіть для нуб. Це зменшить якість коду (значно), оскільки ви не можете використовувати чітко встановлені ідіоми, що виходять за рамки перших двох розділів книги для початківців.
Конрад Рудольф

10
@KonradRudolph: можливо, так, але не пишіть для єдиних хлопців, які знають «Мистецтво комп’ютерного програмування» від обкладинки до обкладинки, або готові після цього налагоджувати свій код, і не мають поняття, чому ви робили такі речі . Код читається набагато більше, ніж написано.
хайлем

15
@dodgethesteamroller: Я бачив дуже багато компетентних / шанованих розробників, які впроваджують пріоритетні помилки (у кожного час від часу поганий), які залишаються непоміченими протягом століть. Для хороших розробників, які знають правила пріоритетності, ризик виявлення помилок / помилок помилок занадто високий. Для всіх інших ризик вищий. Кращі розробники - це розробники, які запам'ятовували правила переваги мови, але забули їх через звичне використання дужок для чогось не очевидного.
Брендан

31

Так

Ви завжди повинні використовувати дужки ... ви не контролюєте порядок пріоритетності ... розробник компілятора робить. Ось історія, яка трапилася зі мною про невикористання дужок. Це вплинуло на сотні людей протягом двох тижнів.

Реальна світова причина

Я успадкував додаток main-frame. Одного разу з ясного синього кольору він перестав працювати. Ось це ... пуф просто зупинився.

Моя робота полягала в тому, щоб якомога швидше це працювало. Вихідний код не змінювався протягом двох років, але раптом він просто припинився. Я спробував скласти код, і він зламався на лінії XX. Я подивився на лінію XX і не міг сказати, що зробить лінію XX розривом. Я попросив детальні характеристики цієї програми, і таких не було. Лінія XX не стала винуватцем.

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

Отже, я вирішив почати вгорі вихідного коду і додати whitespce та рядкові гальма, щоб зробити код більш читабельним. Я помітив, що в деяких випадках існували умови, які поєднувались, ANDі ORце було не чітко розмежоване між тим, які дані ANDредагуються, і тими, що ORредагуються. Тому я почав ставити круглі дужки навколо ANDта ORумови, щоб зробити їх більш зрозумілими.

Коли я повільно рухався вниз, прибираючи його, я періодично економив свою роботу. Якось я спробував скласти код і відбулася дивна річ. Помилка перескочила початковий рядок коду і тепер була внизу. Тож я продовжив, викладаючи умови 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") ...



Я не зміг її переписати, оскільки специфікацій не було. Оригінального автора давно не було. Я пам’ятаю інтенсивний тиск. Цілий вантажний корабель був перекинутий у порт і його не можна було вивантажити, оскільки ця маленька програма не працювала. Без попередження Немає змін у вихідному коді. Мені тільки приснилося запитати в Мережевих операціях, чи вони щось змінили після того, як я помітив, що додавання паронів змінює помилки.


22
Це здається кращою ілюстрацією того, чому важливо мати хорошого компілятора.
ruakh

6
@CapeCodGunny: Я впевнений, що ти цього не зробив. Але проблема полягає в тому, що у вас був поганий постачальник компілятора, який змінив перелом. Я не бачу, як ви засвоїли урок "ЗАВЖДИ, ВЖЕ, ЗАВЖДИ" вирішуйте цю проблему, навіть коли використовуєте кращі компілятори.
ruakh

5
@ruakh - Ні, постачальник просто змінив свій аналізатор коду. Я стара школа, я не покладаюсь на свою здатність запам’ятовувати кожну систему, в якій я був закодований або в якій брав участь. Без документації у вас є лише вихідний код. Коли вихідний код важко читати і дотримуватися, він створює надзвичайно напружену ситуацію. Програмістам, які не використовують пробіл, напевно, ніколи не доводилося стикатися з ситуацією, подібною до тієї, з якою я стикався. Я також дізнався, що має сенс писати код на зразок: Див Дік; Дивіться Джейн; Дивіться Діка І Джейн; Прості заяви, які легко читати ... коментувати ... та слідувати.
Майкл Райлі - AKA Gunny

2
Чудова історія, але я згоден, що це не привід використовувати дужки. та / або пріоритет майже універсальний і стосується найменш вірогідної зміни, про яку можна було б подумати. Якщо ви не можете розраховувати на послідовну поведінку для такої стандартної основної операції, ваш компілятор є сміттям, і ви шлангуєте незалежно від того, чим займаєтесь. Ваша історія - це 100% проблема компілятора та 0% проблема коду. Особливо враховуючи, що поведінка за замовчуванням була простою оцінкою зліва направо - порядок завжди буде зрозумілим, то чому б хто використовував круглі дужки?

7
Я думаю, що тут є уроки з обох сторін ... Вам набагато краще використовувати дужки, особливо коли альтернатива покладається на незадокументовану поведінку компілятора щодо неоднозначного коду . І якщо програміст не знає, які вирази неоднозначні, краще скористайтеся паролями. З іншого боку, небезпечно змінювати поведінку компілятора, але принаймні це кидало помилку у випадках, коли поведінка змінювалася. Було б гірше, якби компілятор не видав помилку, а почав компілювати інакше. Помилка захистила вас від непомітних помилок.
LarsH

18

Так, якщо є змішані "і" і "або".

Також хороша ідея (), що логічно - одна перевірка.

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


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

14

Дужки в дужках є семантично зайвими, тому компілятор не хвилює, але це червона оселедець - справжнє занепокоєння - це читаність та розуміння програміста.

Я збираюся зайняти радикальну позицію тут і дати сердечне "ні" в дужках a AND b OR c AND d. Кожен програміст повинен знати напам'ять , що пріоритет в булевих виразах йде НЕ> І> АБО , так само , як запам'ятовування ласка , вибачте мій дорогий тітку Саллі для алгебраїчних виразів. Надлишкові розділові знаки просто додають зорового скупчення більшу частину часу в коді без користі для читання програміста.

Крім того, якщо ви завжди використовуєте дужки в логічних та алгебраїчних виразах, то ви відмовляєтесь від використання їх як маркера для того, щоб "щось тут хитре відбувається - дивіться!" Тобто, у випадках, коли ви хочете змінити пріоритет за замовчуванням і оцінити додавання перед множенням, або АБО перед І, круглі дужки є гарним червоним прапором для наступного програміста. Занадто багато використовуйте їх, коли вони не потрібні, і ви стаєте Хлопчиком, який плакав Вовка.

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


1
+1, круглі дужки для чіткості, але ANDпроти OR- це досить базовий випадок, про який я хотів би знати інших розробників моєї команди. Я хвилююся, що іноді "використання дужок для ясності" насправді "використання дужок, тому мені ніколи не потрібно заважати вивчати пріоритет".
Тім Гудмен

1
В усіх мовах я працюю регулярно це , .memberперш за унарні оператори, унарні перед тим бінарні оператори, *і /до того, +і -до того, <і >та ==перш , ніж &&до того, ||перш ніж призначення. Ці правила легко запам'ятати , тому що вони відповідають моєму «здоровому глузду» про те , як оператори зазвичай використовується (наприклад, ви не дали б ==більший пріоритет , ніж +або 1 + 1 == 2перестає працювати), і вони покривають 95% черговість питань , які я б .
Тім Гудмен

4
@TimGoodman Так, правильно, на обидва ваші коментарі. Інші відповіді тут, здається, це чорно-біле питання - або користуйтеся дужками весь час, без винятку, або недбало літайте кріслом штанів через море довільних і неможливо запам’ятати правил, ваш код кипить з потенційними важко виявленими помилками. (Змішані метафори дуже навмисні.) Очевидно правильний шлях - помірність; Чіткість коду важлива, але так само добре знати свої інструменти, і ви повинні мати можливість очікувати певного розуміння програмування та принципів CS від своїх товаришів по команді.
dodgethesteamroller

8

Як я бачу це:

ТАК плюси:

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

ТАК Мінуси:

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

Ні плюсів:

  • ?

НІ Мінуси:

  • Порядок операцій неявний
  • Код є менш доступним для розробників без чіткого розуміння порядку операцій.

Добре сказано, хоча я думаю, що "може призвести до захаращеного, важкого для читання коду" є досить суб'єктивним.
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. Що робити, якщо я писав код мовою, яка мала інше прізвище І / АБО і мені довелося відскочити назад, щоб виправити це? Я збираюся поїхати, "ага! Я пам'ятаю цю розумну дрібницю, яку я зробив! Мені не потрібно було включати паренів, коли я писав це минулого року, добре, що я пам'ятаю зараз!" якщо це станеться (або ще гірше, хтось інший, хто не знав про цю кмітливість або був кинутий у ситуацію типу «виправити як можна швидше»)?

Розмежування з () робить його набагато простішим, щоб швидко проглянути і зрозуміти пізніше ...


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);

Ваш конкретний випадок

У вашому конкретному випадку є пріоритет AND порівняно з ІЛИ у мові, якою ви користуєтесь.

Це не так, як поводиться кожна мова. Багато інших ставляться до І та АБО однаково.

Як розробник, який працює в основному з C #, коли я вперше побачив ваше запитання і прочитав фрагмент коду, не читаючи того, що ви писали раніше, моя перша спокуса була прокоментувати, що два вирази не однакові. Сподіваюсь, я прочитав ціле питання цілком, перш ніж коментувати.

Ця особливість і ризик того, що деякі розробники можуть вважати, що І і АБО мають однаковий пріоритет, робить ще важливішим додавання дужок.

Не пишіть код з метою, щоб показати, що ви розумні. Напишіть код з метою читабельності, в тому числі людьми, які можуть бути не знайомі з кожним аспектом мови.


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), і не в змозі бути коментуючи що "нечасто", не кажучи вже про "дуже рідко".
ruakh

1
Я погоджуюся з ruakh і шукаю його на C ++ 11, python, matlab та java.
Дірк

3
Мови, в яких AND і OR є двійковими операторами, і які не трактують AND як більш високий пріоритет, ніж ІЛИ, є пошкодженими дурнями, авторами яких є лайки з інформатики. Це походить від логічного позначення. Привіт, чи "сума продуктів" нічого не означає? Існує навіть булева позначення, яка використовує множення (сукупність факторів) для AND, а символ + для АБО.
Каз

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

В основному, умовне все ще є лише алгебраїчним виразом, і, чітко використовуючи дужки, ви можете легше застосувати різні алгебраїчні правила, які ви вже знаєте, до виразу, включаючи поняття старого "спростити або розширити цю формулу".


2
Я не впевнений, що ти насправді відповідаєш на питання, оскільки ти ведеш свою відповідь з припущенням, яке не обов'язково відповідає дійсності. Чи використовую дужки для алгебри? Не весь час. Якщо це допомагає з читабельністю, то, звичайно, але інші це вже висловили. А розширення математичної алгебри на інші форми не відповідає точно одному відповідному програмуванню - що робити, якщо ви перевіряєте стан кількох рядкових значень?
Дерек

Якщо відповідна булева алгебра є досить складною для того, щоб вимагати паронів, ваш умовний, ймовірно, повинен використовувати паролі. Якщо це досить просто, щоб не вимагати паролів, ви або не повинні, або не повинні. Так чи інакше, мислення про це як би математичний вираз, ймовірно, прояснює проблему.
Нарфанатор

У моїх прикладах вище використовуються два та чотири булеви. Якщо ви перевіряєте стан двох або більше рядкових значень, вони відображаються у карті. Кожна перевірка відповідає одній булевій змінній; незалежно від того, чи перевіряється ціла чи рівна рівність; включення рядка, масиву або хеша; сам складний вираз ... Не має значення; Важливо лише те, що ви маєте більше ніж одне вимірювання істинного / хибного у своєму вираженні.
Нарфанатор

2
Просто причіпки, але !(A + B) <=> !A + !Bі -1*(A + B) = -A + -Bне повинен оператор був перевертається від +до *в другому вираженні?
Джефф Брідгман

-1

Я буду використовувати дужки, навіть якщо це необов’язково, чому, оскільки це допомагає краще зрозуміти всіх, для того, хто пише код, а також того, хто готовий бачити цей код. У вашому випадку навіть булеві оператори мають перевагу, воно спочатку може спрацювати добре, але ми не можемо сказати, що це допоможе вам у кожному випадку. тому я віддаю перевагу дужкам користувачів у будь-яких умовах, які можуть вимагати цього або необов'язково.


-1

Так. Ви повинні використовувати в будь-якому випадку, коли вважаєте, що ваш код стане більш зрозумілим. Пам'ятайте, що ваш код повинен бути достатньо чітким, щоб інші могли зрозуміти, не читаючи ваших коментарів всередині коду. Тож є хорошою практикою використовувати дужки та дужки. Також майте на увазі, що це може залежати від конкретної практики вашої компанії / команди. Просто дотримуйтесь одного підходу і не змішуйте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.