Путание, если оператор?

Я всегда использую Если оператор (В C#) как (1. Альтернатива);

if (IsSuccessed == true)
{
   //
}

Я знаю, что нет никакой потребности записать "== верный" как (2. Альтернатива));

if (IsSuccessed)
{
   //
}

Но, я использую его, потому что это более читаемо, и не вызовите проблему производительности. Конечно, это - мой выбор, и я знаю, что многие разработчики программного обеспечения предпочитают первую альтернативу. Каково лучшее использование, и Почему?

12
задан Zaki 30 August 2010 в 10:26
поделиться

13 ответов

Если имя логического значения ясно дает понять, что это такое, я бы всегда выбрал версию 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
}

Примечание: Да, я знаю, что переменная плохо названа, но изменение ее во множестве мест, где она присутствовала, выходило за рамки того изменения, которое я делал из-за количества мест, если повлияет на .

4
ответ дан 2 December 2019 в 02:51
поделиться

Я утверждаю, что тот, кто предпочитает первую альтернативу, плохо разбирается в логической логике. Они могут «понять» это интеллектуально, но они определенно не гробят это; они не усвоили такой образ мышления.

В конце концов, кто-нибудь использует следующую идиому? «Если завтра пойдет дождь - это ложь, мы можем пойти купаться» - НЕТ , конечно, нет. никто ничего подобного не говорит, это смешно. Какой аргумент поддерживает утверждение о том, что эта идиома внезапно становится понятной, когда применяется в языке программирования (в отличие от естественного)?

7
ответ дан 2 December 2019 в 02:51
поделиться

Эти два выражения эквивалентны в 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
ответ дан 2 December 2019 в 02:51
поделиться

Раньше я писал «== истина», потому что думал, что это было яснее и яснее, но решил изменить. Теперь без него всегда кажется намного понятнее, просто к этому привыкнешь.

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

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

1
ответ дан 2 December 2019 в 02:51
поделиться

Больше набора текста означает больше шансов для ошибок. Вариант 2 полностью ...

2
ответ дан 2 December 2019 в 02:51
поделиться

Я бы тоже согласился на ваш второй вариант. На мой взгляд, нет необходимости писать

if (IsSuccessed == true) 
{ 
   // 
} 

. На самом деле, мне совершенно не нравится использование == true для логического значения, поскольку оно не имеет дополнительного значения. И: вы должны вводить меньше символов, что, очевидно, является преимуществом: p. Честно говоря, я бы также переписал логическое значение на bSuccessed, поскольку оно является логическим.

2
ответ дан 2 December 2019 в 02:51
поделиться

Полностью зависит от стиля. Шутки в сторону. Выбирайте для своих вещей все, что вам нравится, независимо от стиля вашей работы.

8
ответ дан 2 December 2019 в 02:51
поделиться

Я пойду за вторым. По крайней мере, мне так легче. В первом варианте мне всегда интересно, почему проводится сравнение. Проверьте тип в левой части, чтобы убедиться, что ни один разработчик на acid не перегрузил оператор ==, сделав сравнение между его классом и bool опцией.
Первое также приводит к ошибкам, второе - нет.
if (a) может потребоваться изменить на if (a || b) или if (a && b) в первой версии может закончиться как if (a == true || b) и if (a == true && b) в первом b избыточно, а последнее равно if (a == b)

1
ответ дан 2 December 2019 в 02:51
поделиться

Больше всего я вижу: (что я делаю)

if (IsSuccessed)
{
   //
}

и в качестве альтернативы для C ++, для C # это не нужно (см. комментарий) :

if (true == IsSuccessed)
{
   //
}

Альтернатива - предотвратить ошибку, назначив вместо сравнения. (= vs ==)

1
ответ дан 2 December 2019 в 02:51
поделиться

Мне не нравится первый вариант. Мало того, что это избыточно, но простая опечатка приведет к ошибке.

Подумайте об этом

bool b = false;

if (b = true) {
   Console.WriteLine("true");
}

Очевидно, что код будет выводить «true», но это, вероятно, не было намерением программиста.

К счастью, такие инструменты, как Resharper, предостерегают от этого, но он компилируется с настройками по умолчанию (*).

Использование bool напрямую устранит проблему полностью.

(*) Честно говоря, VS также предостерегает от этого, и если вы включите предупреждения как ошибки, он даже не будет компилироваться.

25
ответ дан 2 December 2019 в 02:51
поделиться

Я бы лично выбрал второй вариант. Он читается более естественно и показывает, что программист на самом деле знает о встроенном типе bool , который является первоклассным гражданином.

19
ответ дан 2 December 2019 в 02:51
поделиться

Я предпочитаю вторую альтернативу. Я думаю, что это более читабельно, но у первой альтернативы есть то преимущество, что она остается неизменной, если вам по какой-то причине нужно использовать Boolean? .

6
ответ дан 2 December 2019 в 02:51
поделиться