В то время как это не практическое различие, у меня всегда есть отношения == как числовой оператор, и как таковой, это не применимо к булевым типам. Самый близкий булев оператор является "эквивалентностью" (не эксклюзивный или), который не имеет оператора стиля C.
Тот способ, которым строго булев тест становится
if (!(IsGood ^ true))
Как иллюстрация проблем с числовыми операторами на булевских переменных, какова булевская переменная evalution
true / 2
Существуют некоторые случаи, где выполнение, которое на самом деле полезно, хотя не часто.
Вот пример. В 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
}
Я думаю, что это действительно зависит от языка.
Говорят, в PHP, определенные функции могли или возвратить false и возвратить неотрицательные числа.
Затем:
if(foo(bar)) { ... }
схема не будет работать слишком хорошо, потому что Вы не можете сказать между возвратом лжи или 0.
На других языках, который не имеет этого противного небольшого FUBAR, я думаю, что любая форма приемлема.
Один размер не соответствует всем. Иногда более краткая форма может быть разъяснена или идиоматична, как! (x % y), который возвращает "True", если бы y является фактором x.
Другие времена, более явное сравнение было бы более полезным. [(x, y) для x в диапазоне (10) для y в диапазоне (10), если не (X и Y)] не так просто как [(x, y) для x в диапазоне (10) для y в диапазоне (10) если (x == 0 или y == 0)]
Мне нравится использовать различные стили в зависимости от именования переменных, например:
Переменным, названным с префиксом, нравится, Имеет и т.д., с которым путем рассмотрения имени очевидно, что булевские переменные, которые я использую:
if(IsSomething)
, но если у меня есть переменные, которые не имеют такого префикса, который мне нравится использовать
if(Something == true)
, Которые когда-либо формируют Вас использование, необходимо решить на основе языка программирования, в котором Вы используете его. Значение
if(Something) and if(Something == true)
может иметь совсем другое значение на различных языках программирования.
На языке как C, где нет никакого "булева" типа тогда, я рекомендую более длинный путь т.е.
if (is_good == True)
{
}
, причиной является is_good, не [только 111] / false
(скорее всего, реализован как символ) и следовательно может быть поврежден другими значениями или не устанавливает правильно.
Поэтому, что хороший это? Ваш код будет в состоянии взять любые проблемы с is_good
устанавливаемый неправильно, потому что с == Верный или == Ложь проверяет, что что-либо пойдет для истинного;) И если Вы действительно имеете в виду булевскую переменную тогда, это плохо.
Пока мы имеем или if (isGood)
, или if (!isGood)
это прекрасно.
Иногда я сталкиваюсь с кодом как это...
if (!getGreatGrandFateher.getGrandFather().getFather().getFirstChild().isMale())
{
doSomething();
}
На первый взгляд это вводит в заблуждение, это doSomething
называют, если это - Штекер. Маленькое'!' после, "если" теряется в большой конструкции кода как вышеупомянутое.
Явная проверка как ниже обеспечивает лучшую удобочитаемость
if(getGreatGrandFateher.getGrandFather().getFather().getFirstChild().isMale() == false)
{
doSomething();
}
Две формы семантически идентичны, и производят тот же машинный код, итак, почему бы не использовать тот, который это более читаемо?
if (IsGood == false)
лучше, чем if(!IsGood)
.
При сканировании кода, легко перепутать"!" предшествуя bool переменной для символа в bool переменной.
Кодирование в 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:
, потому что 'не' явно видимо.
Я бы хотел
if (isGood) {
doSomething();
}
и
if (isNotGood) {
doSomethngElse();
}
Читает лучше.
Можно утверждать, что проверка типа 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);