Подтвердить что ты не робот

"если" VS "иначе, если"

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

таким же образом, что:

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

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

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

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

Ответ 3

Если/Если инструкции else не делают плохого кода, я делаю

Ответ 4

Разница между if и else if совпадает с разницей между координационными и эксклюзивными конъюнкциями.

Ответ 5

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

Мне не часто нужно 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; 
}

Ответ 6

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

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

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
}

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

если "else if" является неприемлемой конструкцией, то почему для этого нужен практически каждый современный язык? Я думаю, что ваш штраф с продолжением использования else ifs... кроме того - к тому времени, когда он попадает на сборку, все равно прыжок/goto;)

Ответ 11

Я тоже не согласен. Нет ничего более сложного в отношении "else if"; зависит ли он от правильного подхода к программированию от каждого приложения. В некоторых случаях оператор "switch" или "case" лучше, но, опять же, это зависит от приложения.

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

Ответ 12

Обе формы выполняют одно и то же отладочное усилие. Я бы осмелился сказать, что инструкции "еще если" на самом деле упрощают отладку...

Кроме того, инструкции "else if" повышают производительность, потому что вашей программе не нужно проверять условия, которые фактически являются взаимоисключающими!

Ответ 13

Почему бы вам не попробовать выполнить поиск n, заменив все остальное ifs с ifs в вашем коде? он будет компилироваться, но он будет выполняться только по желанию, если вам повезет...

Это совсем не то же самое, и есть причина, почему есть If и почему есть Else IF.

Пример:

if(3<5) {
 print('blah');
} else if(4<5) {
 print('blub');
}
// blah

if(3<5) {
 print('blah');
} 
if(4<5) {
 print('blub');
}
// blahblub

и я лично предпочитаю апельсины! яблоки - это olschool... Я думаю, что бананы тоже прекрасны (но это время от времени меняется!)

есть также оператор switch.

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

я бы даже сказал, что для каждого варианта использования есть одна оптимальная структура управления, которая будет использоваться!

рассмотрим следующие примеры:

if(money > 2000) {
 switch ($what-car-does-my-wife-want) {
     case "ferrari":
         echo "buying a ferrari";
         break;
     case "chevvy":
         echo "buying a chevvy";
         break;
     case "bmw":
         echo "buying a bmw";
         break;
 }

} else {
 echo "i better not buy a new car";
}
if(money > 5000) {
 echo "wow i can buy a lot of other things too!";
} else if(3000) {
 echo "wow that is a lot of money but i wish i had 5000!";
}

единственное, что вы можете сделать, а вопрос стиля - замена

if(money > 5000) {
 echo "wow i can buy a lot of other things too!";
} else if(money > 3000) {
 echo "wow that is a lot of money but i wish i had 5000!";
}

по

if(money > 5000) {
 echo "wow i can buy a lot of other things too!";
} else { 
    if(money > 3000) {
     echo "wow that is a lot of money but i wish i had 5000!";
    }
}

но я думаю, что это не то, что вы просили?

Ответ 14

Вы сравниваете

if (a=b) do this;
if (a=c) do this;
if (a=d) do this;

To:

if (a=b) do this;
else if (a=c) do this;
else if (a=d) do this;

1) первый пример сложнее отлаживать, потому что у вас нет естественного рабочего процесса для вашего кода, как показано в следующем примере.

2), как указал Джейсон, первый пример выполняется иначе, чем второй, поскольку все три утверждения if будут протестированы независимо от того, что, в то время как второй пример прекратит тестирование, когда он станет истинным.

tl; dr: Ваш босс ошибается, несмотря на то, что у него также есть доступ в Интернет.

Ответ 15

Это намного лучше, чем:

if (a=1) then {
  DoThis;
  EXIT;  // Not sure if this works in your language, but you know what I mean...
}
if (a=2) then {
  DoThis;
  EXIT;
}
if (a=3) then {
  DoThis;
  EXIT;
}

Ответ 16

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

Ответ 17

Форма выражения if есть:

if (condidtion1)
   statement1;
else
   statement2;

Одна из допустимых форм оператора - это оператор if. Пусть сделайте "statement2" выше в "if statement" if (condition2) statement3;

if (condition1)
   statement1;
else if (condition2)
   statement3;

Белое пространство и позиционирование предназначены только для вашей выгоды (удобочитаемости). Компилятор ничего не знает о "else if" per se.

Это демонстрирует, что "if" и "else if" - это не одно и то же. 'else if' - составная инструкция.

Другая допустимая форма для оператора - это блок операторов, заключенных в скобки {}. Вот почему вы часто (обычно) видите скобки в выражении "if". Независимо от того, использовать или не использовать их вокруг одного утверждения, это всего лишь вопрос стиля.

Причиной использования "else if" является то, что вы избегаете обработки выражений "condition", которые, как вы знаете, будут оцениваться как false. Вы знаете это из-за других условий, которые вы уже проверили.

Возможно, ваш босс говорит, что вы можете ошибаться в этих предположениях и что утверждения "еще если" могут скрывать тонкие ошибки. Полагаю, это возможно. Однако это не стоит накладных расходов.

Что он должен сказать об "инструкции switch"?

Ответ 18

Это зависит от того, что вы пытаетесь выполнить. Оба являются приемлемыми формами кодирования, это просто зависит от того, что вы делаете. Например, если вы хотите убедиться, что все сравнения проверены и возможность запуска всего кода, вы должны использовать конструкцию if:

if(condition1IsTrue) {
    methodThatMustRun1();
}

if(condition2IsTrue) {
    methodThatMustRun2();
}

... etc

В этом примере все условия проверяются с возможностью запуска каждого блока кода.

Если вы хотите запустить только один блок кода из нескольких опций, то вы должны использовать конструкцию if else, предпочтительно в порядке наиболее часто встречающегося, чтобы встречаться как минимум:

if(condition1IsTrue) {
    mostCommonMethodToRun();
} else if (separateConditionToCheckInCaseFirstFails) {
    nextMostCommonScenarioMethodToRun();
} else if (...) {
    ... etc
}

В этом втором примере проверяется не более всех условий, но, возможно, проверяется только один. Тем не менее, выполняется только один блок кода (при условии, что у вас есть действие по умолчанию, если никакие условия не соответствуют true).

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

Однако ваш босс МОЖЕТ быть идиотом, если он догматично говорит, что вы никогда не должны программировать в конструкциях if else.

Ответ 19

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

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

Ответ 20

Ответ, данный JDV, кажется правильным. Я пришел сюда, чтобы найти ответ самого симларного типа. Однако ответ, выбранный владельцем вопроса, не является правильным/правильным. Правильный/правильный ответ касается ранних возвратов и четких стилей, и речь идет о том, что слишком много вложенности в инструкцию if-then-else не является хорошим стилем программирования. И отныне отладка плохо написанного кода всегда сложнее.

ЗАКЛЮЧЕНИЕ: условный код должен быть максимально понятным/простым, чтобы либо на этапе программирования, либо на этапе отладки человек мог легко управлять переменными.

Ответ 21

Использование набора операторов 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";
}

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