Затрудняюсь, если выражение?
Я всегда использую оператор If (In С#) как (1. Alternative);
if (IsSuccessed == true)
{
//
}
Я знаю, что нет необходимости писать "== true" как (2. Альтернатива));
if (IsSuccessed)
{
//
}
Но я использую его, потому что он более читабельен и не вызывает проблем с производительностью. Конечно, это мой выбор, и я знаю, что многие разработчики программного обеспечения предпочитают первую альтернативу. Какое наилучшее использование и почему?
Ответы
Ответ 1
Если имя логического значения делает его совершенно ясным, что это такое, тогда я всегда выбираю версию 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
}
Примечание: Да, я знаю, что переменная плохо названа, но ее изменение во множестве мест, которые она присутствовало, выходит за рамки изменений, которые я делал из-за количества мест если это повлияет.
Ответ 2
Мне не нравится первый вариант. Это не только избыточно, но и простая опечатка приведет к ошибке.
Рассмотрим это
bool b = false;
if (b = true) {
Console.WriteLine("true");
}
Очевидно, что код выводит "true", но это, вероятно, не было целью программиста.
К счастью, такие инструменты, как Resharper, предупреждают об этом, но он компилируется с настройками по умолчанию (*).
Использование bool напрямую удалит проблему полностью.
(*) Чтобы быть справедливым, VS также предупреждает об этом, и если вы включите Warnings как ошибки, он даже не будет компилироваться.
Ответ 3
Я бы выбрал второй вариант. Он читается более естественно и показывает, что программист действительно знает о встроенном типе bool
, который является первоклассным гражданином.
Ответ 4
Полностью зависит от стиля. Шутки в сторону. Идите с тем, что вам нравится для ваших собственных вещей, независимо от того, какой у вас стиль общения.
Ответ 5
Я утверждаю, что кто-то, кто выступает за первую альтернативу, имеет отрывочное понимание логической логики. Они могут "понимать" это интеллектуально, но они, конечно же, не забивают его; они не усвоили этот способ мышления.
В конце концов, кто-нибудь каждый использует следующую идиому? "Если его дождь завтра будет ложным, мы можем пойти купаться" - НЕТ, конечно нет. никто не говорит что-то вроде этого, это смешно. Какой аргумент поддерживает утверждение о том, что эта идиома внезапно становится ясной при применении в программировании (в отличие от естественного) языка?
Ответ 6
Я предпочитаю вторую альтернативу. Я думаю, что это более читаемо, но первая альтернатива имеет то преимущество, что вам нужно использовать Boolean?
по какой-то причине.
Ответ 7
Раньше я писал "== true", потому что я думал, что он яснее и яснее, но решил измениться. Теперь это всегда кажется намного понятнее, вы просто привыкнете к нему.
Ответ 8
Я бы согласился и на ваш второй вариант. По-моему, нет необходимости писать
if (IsSuccessed == true)
{
//
}
На самом деле, мне совершенно не нравится использование == true для логического, поскольку он не имеет дополнительного значения.
И: вам нужно набрать меньше символов, что, очевидно, является преимуществом: p.
Честно говоря, я бы также переписал логическое значение bSuccessed, так как он является логическим.
Ответ 9
Два выражения эквивалентны в С#, но имейте в виду, что на других языках они не являются.
Например, в С++ первая опция принимает только логическое значение со значением 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
Опять же, это не относится к С#, поскольку он принимает только booleans на ifs. Но имейте в виду, что другие языки принимают больше, чем просто булевы.
Ответ 10
Более типизация означает больше шансов на ошибки. Вариант 2 полностью...
Ответ 11
Я использую первый, когда начинаю программировать, но как-то привыкну к второму варианту. Он также сохраняет дополнительные буквы типа времени.
Ответ 12
Я пойду за вторым. Мне это по крайней мере легче. В первом варианте я всегда удивляюсь, почему делается сравнение. Проверьте тип левой стороны, чтобы убедиться, что ни один разработчик на кислоте не перегрузил оператор ==, делающий сравнение между его классом и bool опцией.
Первый также приводит к ошибкам, второй не будет.
if(a)
может потребоваться изменить на if(a||b)
или if(a&&b)
в первой версии, которая может закончиться так: if(a == true || b)
и if(a == true && b)
в предыдущем b
является избыточной, а последняя равна if(a==b)
Ответ 13
Что я вижу больше всего: (что я делаю)
if (IsSuccessed)
{
//
}
и как альтернатива для С++, для С# он не нужен (см. комментарий):
if (true == IsSuccessed)
{
//
}
Альтернатива заключается в том, чтобы не допустить, чтобы ошибка была назначена вместо сравнения. (= vs ==)