Можно ли упростить это условное утверждение, в котором используется оператор логического отрицания? - PullRequest
3 голосов
/ 05 июля 2010

Извините, если это вопрос типа «Логические операторы 101». Я уже 15 минут смотрю на экран, пытаясь обернуть его вокруг себя, но я застрял.

Есть ли более краткий / изящный способ сформулировать следующее (это синтаксис JavaScript, но это не вопрос языка):

if (!something && !something_else) {
  // do something
}

Судя по некоторым экспериментам, это не является логическим эквивалентом:

if (!(something && something_else) {
  // do something
}

Кроме того, кто-нибудь может порекомендовать онлайн-ресурс (ы) для дальнейшего изучения подобных вопросов? Я предполагаю, что этот тип вещей рассматривается на абстрактном уровне в программах по информатике, и это - существенный пробел в моих знаниях программирования, который я действительно хотел бы заполнить. Спасибо!

Ответы [ 4 ]

11 голосов
/ 05 июля 2010
(Not A) And (Not B)

эквивалентно:

Not (A Or B)

Это применение законов Де Моргана

3 голосов
/ 05 июля 2010

Я думаю, вам нужно

if (!(something || something_else)) {
  // do something
}

! Что-то &&! Something_else означает "ни чего-то и ни чего-то_это", что эквивалентно "ни (что-то или что-то_это)"

3 голосов
/ 05 июля 2010

Правильное выражение должно быть:

if (!(something || something else)) {
  // do something
}

Когда вы применяете отрицание, оно переключает операторы между AND и OR.

0 голосов
/ 23 апреля 2015

Слово для того, что вы описываете, - ни ворота, ни врата, ни ворота.

...