Я всегда использую Если оператор (В C#) как (1. Альтернатива);
if (IsSuccessed == true)
{
//
}
Я знаю, что нет никакой потребности записать "== верный" как (2. Альтернатива));
if (IsSuccessed)
{
//
}
Но, я использую его, потому что это более читаемо, и не вызовите проблему производительности. Конечно, это - мой выбор, и я знаю, что многие разработчики программного обеспечения предпочитают первую альтернативу. Каково лучшее использование, и Почему?
Если имя логического значения ясно дает понять, что это такое, я бы всегда выбрал версию 2. Однако иногда вы застреваете с особенно тупым именем переменной, которое вы не можете изменить, по крайней мере , не могу сейчас изменить ... Рефакторинг - это хорошо, но я стараюсь избегать слишком сильного рефакторинга при внесении функциональных изменений в код.
Например:
if (!NoDropDownInHeader == true)
{
// Activates when there *is* a dropdown in the header)
}
Я действительно видел этот конкретный пример в производственном коде и упростил его до:
if (NoDropDownInHeader == false)
{
// Activates when there *is* a dropdown in the header
}
И я лично считаю, что оба примера более читабельны (хотя, возможно, первый пример может быть на одном уровне с это из-за сложности мысленного анализа), чем:
if (!NoDropDownInHeader)
{
// Activates when there *is* a dropdown in the header
}
Примечание: Да, я знаю, что переменная плохо названа, но изменение ее во множестве мест, где она присутствовала, выходило за рамки того изменения, которое я делал из-за количества мест, если повлияет на .
Я утверждаю, что тот, кто предпочитает первую альтернативу, плохо разбирается в логической логике. Они могут «понять» это интеллектуально, но они определенно не гробят это; они не усвоили такой образ мышления.
В конце концов, кто-нибудь использует следующую идиому? «Если завтра пойдет дождь - это ложь, мы можем пойти купаться» - НЕТ , конечно, нет. никто ничего подобного не говорит, это смешно. Какой аргумент поддерживает утверждение о том, что эта идиома внезапно становится понятной, когда применяется в языке программирования (в отличие от естественного)?
Эти два выражения эквивалентны в C #, но имейте в виду, что в других языках это не так.
Например, в C ++ первая опция принимает только логическое значение со значением true. Любое другое значение в IsSuccessed
сделает условие недействительным.
Второй вариант принимает любое значение, которое является «правдивым»: такие значения, как 1 или любое ненулевое значение, также считаются допустимыми для if.
Таким образом, эти условия будут проверяться:
// Truthy validation (second option)
if(1) {...} //validates
if(2) {...} //validates
В то время как другие не будут:
// Equals to true validation (first option)
if(1==true) {...} // does not validate
if(2==true) {...} // does not validate
Опять же, это не относится к C #, поскольку он принимает логические значения только для if. Но имейте в виду, что другие языки принимают здесь не только логические значения.
Раньше я писал «== истина», потому что думал, что это было яснее и яснее, но решил изменить. Теперь без него всегда кажется намного понятнее, просто к этому привыкнешь.
Я использовал первый, когда начинал программировать, но как бы привык ко второму варианту. Это также экономит время, набирая лишние буквы.
Больше набора текста означает больше шансов для ошибок. Вариант 2 полностью ...
Я бы тоже согласился на ваш второй вариант. На мой взгляд, нет необходимости писать
if (IsSuccessed == true)
{
//
}
. На самом деле, мне совершенно не нравится использование == true для логического значения, поскольку оно не имеет дополнительного значения. И: вы должны вводить меньше символов, что, очевидно, является преимуществом: p. Честно говоря, я бы также переписал логическое значение на bSuccessed, поскольку оно является логическим.
Полностью зависит от стиля. Шутки в сторону. Выбирайте для своих вещей все, что вам нравится, независимо от стиля вашей работы.
Я пойду за вторым. По крайней мере, мне так легче. В первом варианте мне всегда интересно, почему проводится сравнение. Проверьте тип в левой части, чтобы убедиться, что ни один разработчик на acid не перегрузил оператор ==, сделав сравнение между его классом и bool опцией.
Первое также приводит к ошибкам, второе - нет.
if (a)
может потребоваться изменить на if (a || b)
или if (a && b)
в первой версии может закончиться как if (a == true || b)
и if (a == true && b)
в первом b
избыточно, а последнее равно if (a == b)
Больше всего я вижу: (что я делаю)
if (IsSuccessed)
{
//
}
и в качестве альтернативы для C ++, для C # это не нужно (см. комментарий) :
if (true == IsSuccessed)
{
//
}
Альтернатива - предотвратить ошибку, назначив вместо сравнения. (= vs ==)
Мне не нравится первый вариант. Мало того, что это избыточно, но простая опечатка приведет к ошибке.
Подумайте об этом
bool b = false;
if (b = true) {
Console.WriteLine("true");
}
Очевидно, что код будет выводить «true», но это, вероятно, не было намерением программиста.
К счастью, такие инструменты, как Resharper, предостерегают от этого, но он компилируется с настройками по умолчанию (*).
Использование bool напрямую устранит проблему полностью.
(*) Честно говоря, VS также предостерегает от этого, и если вы включите предупреждения как ошибки, он даже не будет компилироваться.
Я бы лично выбрал второй вариант. Он читается более естественно и показывает, что программист на самом деле знает о встроенном типе bool
, который является первоклассным гражданином.
Я предпочитаю вторую альтернативу. Я думаю, что это более читабельно, но у первой альтернативы есть то преимущество, что она остается неизменной, если вам по какой-то причине нужно использовать Boolean?
.