Использование «if / elseif / else» против «if / else {if / else}» - PullRequest
2 голосов
/ 02 апреля 2011

Я очень часто использую такой шаблон:

if (a > b) {
    foo();
}
elseif (c > d) {
    bar();
}
else {
    baz();
}

Смысл в том, что второе условие явно не связано с первым, если вы не будете тщательно следовать логике программы. Это очень плохо? Было бы предпочтительнее сформулировать вышесказанное как

if (a > b) {
    foo();
}
else {
    if (c > d) {
        bar();
    }
    else {
        baz();
    }
 }

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

Ответы [ 5 ]

4 голосов
/ 02 апреля 2011

Это на самом деле не имеет значения.

Я предпочитаю шаблон Leaky Rowboat *:

if (a > b) 
{
    foo();
    return;
}

if (c > d) 
{
    bar();
    return;
}
baz();

, который даже лучше, когда вы что-то возвращаете:

if (a > b) 
    return foo();

if (c > d) 
    return bar();

return baz();

* залог рано, залог быстро

3 голосов
/ 02 апреля 2011

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

1 голос
/ 12 июля 2011

Я думаю, что это запах кода.Не очень очевидно, что вы делаете здесь, или почему вы это делаете.Тот факт, что вы думаете, что они явно не связаны, и что они являются частым источником ошибок, говорит вам, что вы не должны делать это таким образом.эти условия понятны.В идеале вы сможете прочитать код, чтобы он выражал ваши намерения и / или ваши спецификации.

taller_than_wide = a > b;
more_expensive_than_normal = c > d;

if (taller_than_wide) {
      foo();
}
elseif (more_expensive_than_normal) {
      bar();
}
else {
      baz();
}
0 голосов
/ 02 апреля 2011

Я бы, конечно, использовал первое, так как оно намного читабельнее второго.

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

0 голосов
/ 02 апреля 2011

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

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