"если 'VS" еще, если " - PullRequest
       64

"если 'VS" еще, если "

11 голосов
/ 24 сентября 2010

Мне сказали, что использование операторов "if" предпочтительнее из-за более сложной отладки кода, когда используется "else if"?Есть ли доля правды в этом утверждении?

Ответы [ 21 ]

50 голосов
/ 24 сентября 2010

У меня никогда не было проблем с отладкой операторов else. Я думаю, что использование операторов «else if» является чистым, и он сообщает программисту, читающему код, что группа операторов «else if» является взаимоисключающей.

12 голосов
/ 24 сентября 2010
if(...)
{
}
else if(...)
{
}

полностью эквивалентно:

if(...)
{
}
else
   if(...)
   {
   }    

точно так же, как:

if(...)
   foo();
else
   bar();

полностью эквивалентно:

if(...) foo();
else bar();

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

9 голосов
/ 24 сентября 2010

Если / если операторы else не создают плохой код, я делаю

8 голосов
/ 24 сентября 2010

Разница между if и else if такая же, как и между , координирующим и исключительными соединениями.

8 голосов
/ 24 сентября 2010

Может быть, ваш босс просто хочет рекомендовать скорейшее возвращение.

Мне не часто нужно if / else. Но это не потому, что else неправильно, а потому, что мне нравится ранний возврат, и если вы используете ранний возврат, вам больше не нужно так много.

Так что вместо:

boolean validate(DomainObject o) {
  boolean valid = false;
  if (o.property == x) {
     valid = true;
  } else if (o.property2 == y) {
     valid = true;
  } ...
  return valid; 
}

Я предпочитаю печатать:

boolean validate(DomainObject o) {

  if (o.property == x) 
     return true;

  if (o.property2 == y) 
     return true;

  return false; 
}
3 голосов
/ 24 сентября 2010

Утверждение «иначе, если сложнее отладить» смешно.Я предлагаю вам не просить этого человека о помощи в будущем.

Используйте семантически правильное решение.Если решение:

if a is true do a.action
if a is not true and b is true, then do b.action
otherwise do c.action

, тогда else if подходит.Например:

if (a == true)
{
  // do a.action
}
else if (b == true)
{
  // do b.action
}
else
{
  // do c.action
}

Если решение:

if a is true do a.action
if b is true do b.action
if c is true do c.action

, тогда else if не подходит.Например:

if (a == true)
{
  // do a.action
}
if (b == true) // note that we don't care if a was true
{
  // do b.action
}
if (c == true) // care about neither a nor b
{
  // do c.action
}
2 голосов
/ 24 сентября 2010

При нормальном использовании нет ничего плохого в else if. На самом деле, я бы посчитал это жизненно важным методом кодирования.

Единственное время else if - это проблема, когда вы объединяете их вместе - мне пришлось отлаживать унаследованный код, состоящий из тысяч строк, состоящий из страницы за страницей if, elseif, elseif, elseif .. .... до бесконечности. Теперь , что плохой код. Не делай этого.

Это такая вещь, которая, возможно, дала вам плохой опыт, если бы, но это просто плохое кодирование; Вы могли бы сделать так же плохо или хуже без остального, если.

2 голосов
/ 24 сентября 2010

Мне нравится старая поговорка «отладка вдвое сложнее, чем написание кода, поэтому, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны для его отладки». Поэтому я стараюсь сделать мой код легким для чтения и отладки (иногда это невозможно). Это, как говорится, я не думаю, что еще, если очень умный, поэтому я бы продолжил использовать его.

1 голос
/ 24 сентября 2010

Я думаю, что это не так.Оператор if, else if довольно прост и легко отлаживается.Я предполагаю, что это может зависеть от человека, который отлаживает, но по моему опыту нет ни единой разницы, и я не слышал, чтобы кто-то кричал "черт тебя побери, если!"во время отладки его кода.

0 голосов
/ 21 сентября 2017

Использование набора операторов if полностью отличается от использования if, а затем else if s.

пример:

if(x>5)
{
    color="blue";
}
if(x>10)
{
    color="red";
}

в этом случае, если мы использовали 15как x, тогда цвет будет перезаписан с помощью red.

, однако, если мы используем else if

if(x>5)
{
    color="blue";
}
else if(x>10)
{
    color="red";
}

Цвет будет синим в этом случае, потому что мы будем игнорировать секундыУтверждение в качестве первого уже верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...