Если я использую'! IsGood' или 'IsGood == ложь'?

46
задан 8 revs, 5 users 66% 17 March 2011 в 10:58
поделиться

41 ответ

В то время как это не практическое различие, у меня всегда есть отношения == как числовой оператор, и как таковой, это не применимо к булевым типам. Самый близкий булев оператор является "эквивалентностью" (не эксклюзивный или), который не имеет оператора стиля C.

Тот способ, которым строго булев тест становится

if (!(IsGood ^ true))

Как иллюстрация проблем с числовыми операторами на булевских переменных, какова булевская переменная evalution

true / 2
0
ответ дан user30364 26 November 2019 в 19:58
поделиться

Существуют некоторые случаи, где выполнение, которое на самом деле полезно, хотя не часто.

Вот пример. В Actionscript 2 булевские переменные имеют 3 возможных значения:

  • верный
  • ложь
  • пустой/неопределенный

я буду обычно делать что-то вроде этого в методах, которые берут дополнительные булевы аргументы:

function myFunc(b:Boolean):Void {
  if(b == true) {
    // causes b to default to false, as null/undefined != true
  }
}

ИЛИ

function myFunc(b:Boolean):Void {
  if(b != false) {
    // causes b to default to true, as null/undefined != false
  }
}

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

function myFunc(b:Boolean):Void {
  b = (b == true); // default to false
}

ИЛИ

function myFunc(b:Boolean):Void {
  b = (b != false); // default to true
}
0
ответ дан Herms 26 November 2019 в 19:58
поделиться

Я думаю, что это действительно зависит от языка.

Говорят, в PHP, определенные функции могли или возвратить false и возвратить неотрицательные числа.

Затем:

if(foo(bar)) { ... }

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

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

0
ответ дан Calyth 26 November 2019 в 19:58
поделиться

Один размер не соответствует всем. Иногда более краткая форма может быть разъяснена или идиоматична, как! (x % y), который возвращает "True", если бы y является фактором x.

Другие времена, более явное сравнение было бы более полезным. [(x, y) для x в диапазоне (10) для y в диапазоне (10), если не (X и Y)] не так просто как [(x, y) для x в диапазоне (10) для y в диапазоне (10) если (x == 0 или y == 0)]

0
ответ дан J.T. Hurley 26 November 2019 в 19:58
поделиться

Мне нравится использовать различные стили в зависимости от именования переменных, например:

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

if(IsSomething)

, но если у меня есть переменные, которые не имеют такого префикса, который мне нравится использовать

if(Something == true)

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

if(Something) and if(Something == true)

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

0
ответ дан 26 November 2019 в 19:58
поделиться

На языке как C, где нет никакого "булева" типа тогда, я рекомендую более длинный путь т.е.

if (is_good == True)
{
}

, причиной является is_good, не [только 111] / false (скорее всего, реализован как символ) и следовательно может быть поврежден другими значениями или не устанавливает правильно.

Поэтому, что хороший это? Ваш код будет в состоянии взять любые проблемы с is_good устанавливаемый неправильно, потому что с == Верный или == Ложь проверяет, что что-либо пойдет для истинного;) И если Вы действительно имеете в виду булевскую переменную тогда, это плохо.

0
ответ дан 2 revs, 2 users 86% 26 November 2019 в 19:58
поделиться

Пока мы имеем или if (isGood), или if (!isGood) это прекрасно.

Иногда я сталкиваюсь с кодом как это...

if (!getGreatGrandFateher.getGrandFather().getFather().getFirstChild().isMale())
{
   doSomething();
}

На первый взгляд это вводит в заблуждение, это doSomething называют, если это - Штекер. Маленькое'!' после, "если" теряется в большой конструкции кода как вышеупомянутое.

Явная проверка как ниже обеспечивает лучшую удобочитаемость

if(getGreatGrandFateher.getGrandFather().getFather().getFirstChild().isMale() == false)
{
   doSomething();
}
0
ответ дан 2 revs, 2 users 89% 26 November 2019 в 19:58
поделиться

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

if (IsGood == false) лучше, чем if(!IsGood).

При сканировании кода, легко перепутать"!" предшествуя bool переменной для символа в bool переменной.

0
ответ дан 2 revs, 2 users 89% 26 November 2019 в 19:58
поделиться

Кодирование в C#/C ++/Java/etc... Я всегда предпочитаю

if (something == true)
if (something == false)

[более чем 117]

if (something)
if (!something)

, потому что восклицательный знак просто трудно видеть сразу, если я не использовал большой шрифт (но тогда я буду видеть меньше кода на странице - не все мы можем предоставить 24 дюйма + мониторы). Мне особенно не нравится быть непоследовательным и использовать if (something) и if (something == false)

, Когда я кодирую в Python, однако, я почти всегда предпочитаю

if something:
if not something:

, потому что 'не' явно видимо.

-1
ответ дан 3 revs, 2 users 98% 26 November 2019 в 19:58
поделиться

​​Я бы хотел

if (isGood) {
  doSomething();
}

и

if (isNotGood) {
    doSomethngElse();
}

Читает лучше.

-2
ответ дан 26 November 2019 в 19:58
поделиться

Можно утверждать, что проверка типа if isValidDate == true может привести к избыточному вложению. Рассмотрим блок кода, который проверяет, что у нас есть действительные данные от пользователя, например:

if (isValidDate == true) {
    if (isValidQuantity == true) {
         if (isOtherThingValid == true) {
              bool result = doThing();
              if (result == true) {
                   thatWorked();
         } // long block of code that tries to compensate for OtherThing's invalidness
    } // obtuse function call to a third party library to send an email regarding the invalid quantity
} // is this the function close brace or the if...

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

if (isValidDate == false) {
    logThisProblem("Invalid date provided.");
    return somethingUseful;
}

if (isValidQuantity == false) {
    logThisProblem("Invalid quantity provided.");
    return somethingUseful;
}

if (isOtherThingValid == false) {
    logThisProble("Other thing not valid.");
    return somethingUseful;
}

// OK ... we've made it this far...
bool result = doThing(date, quantity, otherThing);
0
ответ дан 26 November 2019 в 19:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: