Я кодировал здесь на днях, пишущий несколько, если операторы с целыми числами, которые являются всегда также 0
или 1
(практически действующий как bool
s). Я спросил меня:
При тестировании на положительный результат, который лучше; тестирование на int == 1
или int != 0
?
Например, учитывая интервал n
, если я хочу протестировать, если это true
, если я использую n == 1
или n != 0
?
Есть ли какое-либо различие вообще в отношении скорости, вычислительной мощности, и т.д.?
Проигнорируйте то, что интервал может, будучи больше/меньше, чем 1
/0
, это не важно и не происходит.
Человеческий мозг лучше обрабатывает утверждения, не содержащие отрицания, что делает "int == 1" лучшим способом.
(Предполагая, что ваши int могут быть только 1 или 0) Два оператора логически эквивалентны. Я бы рекомендовал использовать синтаксис ==, потому что я думаю, что большинству людей будет понятнее, когда вы не вводите ненужные отрицания.
В языке, где int, отличные от 0, представляют логическое значение «истина», а 0 - «ложь», например C, я буду использовать if (int! = 0)
, потому что он представляет то же значение, что и if (int)
, тогда как int == 1
представляет больше целочисленное значение, равное 1, а не логическое значение true. Хотя, может быть, это только я. В языках, поддерживающих логический тип, всегда используйте его, а не целые числа.
Если вы работаете со значениями, которые могут быть только 1 или 0, я предлагаю вам для начала использовать логические значения, а затем просто выполнить if (bool)
или если (! Bool)
.
Я был из мира Си. Сначала я мало что понимал в 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
При использовании целых чисел в качестве булевых я предпочитаю интерпретировать их следующим образом: false = 0, true = ненулевое значение.
Я бы написал операторы условия как int == 0 и int != 0.
Если возможны только два значения, то я бы использовал первое:
if(int == 1)
потому что оно более явное. Если бы не было ограничений на значения, я бы думал иначе.
Два балла:
1) Как отмечалось выше, более явное выражение - это победа. Если вы добавляете что-то в пустой список, вы не только хотите, чтобы его размер был не равным нулю, но и явно равным 1.
2) Возможно, вы захотите сделать (1 == целое) Таким образом, если вы забудете знак =, вы получите ошибку компиляции, а не сеанс отладки.
Это действительно зависит. Если вы используете язык, который поддерживает булевы типы, то вы должны использовать булевы типы, а не целые числа, т.е.:
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)
, поскольку отрицание сложнее и с большей вероятностью приведет к ошибкам в обслуживании.
Глупый вопрос. Если вы проверяете на 1, проверяйте на 1, если вы проверяете на ноль, проверяйте на ноль.
Добавление оператора else
может сделать выбор произвольным. Я бы выбрал то, что имеет наибольший смысл или большее контекстуальное значение, например, поведение по умолчанию или "естественное" поведение, предполагаемое ожидаемой частотой появления.
Этот выбор между int == 0
и int != 1
вполне может сводиться к субъективным оценкам, о которых, вероятно, не стоит беспокоиться.
IF INT IS 1
NEXT SENTENCE
ELSE MOVE "INT IS NOT ONE" TO MESSAGE.
Я согласен с тем, что большинство людей сказали в этом посте. Гораздо эффективнее использовать логические значения, если у вас есть одна из двух различных возможностей. Это также упрощает чтение и интерпретацию кода.
if (bool) {...}
У меня паранойя. Если значение либо 0
, либо 1
, то оно может быть 2
. Может быть, не сегодня, может быть, не завтра, но какой-нибудь программист по обслуживанию сделает что-то странное в подклассе. Иногда я сам делаю ошибки [тссс, не говорите моему работодателю]. Итак, заставьте код сказать мне, что значение либо 0
, либо 1
, иначе он плачет маме.
if (i == 0) {
... 0 stuff ...
} else if (i == 1) {
... 1 stuff ...
} else {
throw new Error();
}
(Вы можете предпочесть switch
- я нахожу его синтаксис в языке фигурных скобок слишком тяжелым)
Как уже говорили другие, использование ==
часто легче читать, чем использование ! =
.
Тем не менее, большинство процессоров имеют специальную операцию сравнения с нулем. Это зависит от конкретного компилятора, процессора и так далее, но в результате может быть почти неизмеримо небольшое преимущество в скорости использования ! = 0
по сравнению с == 1
.
Однако большинство языков позволяют использовать if (int)
и if (! Int)
, что и более читабельно, и дает вам незначительный бонус к скорости.
if( is_numeric( $int ) ) { its a number }
elseif( !$int ) { $int is not set or false }
else { its set but its not a number }
конец обсуждения: P
Я бы сказал, что это зависит от семантики, если условие означает
while ( ! abort )
, то отрицание нормально.
if ( quit ) break;
тоже нормально.
Честно говоря, если значение int равно 1 или 0, вы можете даже сказать:
if (int)
и это будет то же самое, что сказать
if (int != 0)
но вы, вероятно, захотите использовать
if (int == 1)
потому что не ноль потенциально позволит ответу быть чем-то отличным от 1, хотя вы сказали не беспокоиться об этом.