Я должен протестировать, если равный 1 или не равный 0?

Я кодировал здесь на днях, пишущий несколько, если операторы с целыми числами, которые являются всегда также 0 или 1 (практически действующий как bools). Я спросил меня:

При тестировании на положительный результат, который лучше; тестирование на int == 1 или int != 0?

Например, учитывая интервал n, если я хочу протестировать, если это true, если я использую n == 1 или n != 0?

Есть ли какое-либо различие вообще в отношении скорости, вычислительной мощности, и т.д.?

Проигнорируйте то, что интервал может, будучи больше/меньше, чем 1/0, это не важно и не происходит.

10
задан Emil 16 November 2012 в 13:54
поделиться

17 ответов

Человеческий мозг лучше обрабатывает утверждения, не содержащие отрицания, что делает "int == 1" лучшим способом.

47
ответ дан 3 December 2019 в 13:09
поделиться

(Предполагая, что ваши int могут быть только 1 или 0) Два оператора логически эквивалентны. Я бы рекомендовал использовать синтаксис ==, потому что я думаю, что большинству людей будет понятнее, когда вы не вводите ненужные отрицания.

0
ответ дан 3 December 2019 в 13:09
поделиться

В языке, где int, отличные от 0, представляют логическое значение «истина», а 0 - «ложь», например C, я буду использовать if (int! = 0) , потому что он представляет то же значение, что и if (int) , тогда как int == 1 представляет больше целочисленное значение, равное 1, а не логическое значение true. Хотя, может быть, это только я. В языках, поддерживающих логический тип, всегда используйте его, а не целые числа.

9
ответ дан 3 December 2019 в 13:09
поделиться

Если вы работаете со значениями, которые могут быть только 1 или 0, я предлагаю вам для начала использовать логические значения, а затем просто выполнить if (bool) или если (! Bool) .

10
ответ дан 3 December 2019 в 13:09
поделиться

Я был из мира Си. Сначала я мало что понимал в objective-c. Через некоторое время я предпочитаю что-то вроде:

if (int == YES)

или

if (int == NO)

в c, т.е.:

if (int == true)
if (int == false)

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

 name   marital_status
------  --------------
 john      single
 joe       married

намного лучше, чем:

 name   marital_status
------  --------------
 john         S
 joe          M

или

 name   marital_status
------  --------------
 john         1
 joe          2
1
ответ дан 3 December 2019 в 13:09
поделиться

При использовании целых чисел в качестве булевых я предпочитаю интерпретировать их следующим образом: false = 0, true = ненулевое значение.

Я бы написал операторы условия как int == 0 и int != 0.

1
ответ дан 3 December 2019 в 13:09
поделиться

Если возможны только два значения, то я бы использовал первое:

if(int == 1)

потому что оно более явное. Если бы не было ограничений на значения, я бы думал иначе.

2
ответ дан 3 December 2019 в 13:09
поделиться

Два балла:

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

2) Возможно, вы захотите сделать (1 == целое) Таким образом, если вы забудете знак =, вы получите ошибку компиляции, а не сеанс отладки.

6
ответ дан 3 December 2019 в 13:09
поделиться

Это действительно зависит. Если вы используете язык, который поддерживает булевы типы, то вы должны использовать булевы типы, а не целые числа, т.е.:

if (value == false)

или

if (value == true)

Но, тем не менее, при использовании реальных булевых типов, вполне допустимо (и обычно приятнее) просто написать:

if (!value)

или

if (value)

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

Тем не менее, если вы используете язык, который не поддерживает булевы числа напрямую, лучший вариант здесь зависит от того, как вы определяете true и false. Часто false - это 0, а true - это все, что угодно, кроме 0. В такой ситуации используйте if (i == 0) (для проверки false) и if (i != 0) для проверки true.

Если вы гарантируете, что 0 и 1 - единственные два значения, я бы, вероятно, использовал if (i == 1), поскольку отрицание сложнее и с большей вероятностью приведет к ошибкам в обслуживании.

35
ответ дан 3 December 2019 в 13:09
поделиться

Глупый вопрос. Если вы проверяете на 1, проверяйте на 1, если вы проверяете на ноль, проверяйте на ноль.

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

Этот выбор между int == 0 и int != 1 вполне может сводиться к субъективным оценкам, о которых, вероятно, не стоит беспокоиться.

7
ответ дан 3 December 2019 в 13:09
поделиться
IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
2
ответ дан 3 December 2019 в 13:09
поделиться

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

if (bool) {...}

1
ответ дан 3 December 2019 в 13:09
поделиться

У меня паранойя. Если значение либо 0, либо 1, то оно может быть 2. Может быть, не сегодня, может быть, не завтра, но какой-нибудь программист по обслуживанию сделает что-то странное в подклассе. Иногда я сам делаю ошибки [тссс, не говорите моему работодателю]. Итак, заставьте код сказать мне, что значение либо 0, либо 1, иначе он плачет маме.

if (i == 0) {
    ... 0 stuff ...
} else if (i == 1) {
    ... 1 stuff ...
} else {
    throw new Error();
}

(Вы можете предпочесть switch - я нахожу его синтаксис в языке фигурных скобок слишком тяжелым)

.
2
ответ дан 3 December 2019 в 13:09
поделиться

Как уже говорили другие, использование == часто легче читать, чем использование ! = .

Тем не менее, большинство процессоров имеют специальную операцию сравнения с нулем. Это зависит от конкретного компилятора, процессора и так далее, но в результате может быть почти неизмеримо небольшое преимущество в скорости использования ! = 0 по сравнению с == 1 .

Однако большинство языков позволяют использовать if (int) и if (! Int) , что и более читабельно, и дает вам незначительный бонус к скорости.

2
ответ дан 3 December 2019 в 13:09
поделиться
if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }

конец обсуждения: P

1
ответ дан 3 December 2019 в 13:09
поделиться

Я бы сказал, что это зависит от семантики, если условие означает

while ( ! abort ), то отрицание нормально.

if ( quit ) break; тоже нормально.

1
ответ дан 3 December 2019 в 13:09
поделиться

Честно говоря, если значение int равно 1 или 0, вы можете даже сказать:

if (int)

и это будет то же самое, что сказать

if (int != 0)

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

if (int == 1)

потому что не ноль потенциально позволит ответу быть чем-то отличным от 1, хотя вы сказали не беспокоиться об этом.

3
ответ дан 3 December 2019 в 13:09
поделиться
Другие вопросы по тегам:

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