2016-10-13 2 views
2

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

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

void func() { 
    if (a) { 
     do b 
    }  
    else { 
     do c 
    } 
} 

или

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 
+0

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

+0

Я думаю, что это очень похоже на это http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement – hakim

ответ

1

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

1

Я выбрал бы первый вариант. Несколько лет назад мне дали подробное объяснение.

Два примера, как вы их написали сейчас, функционально идентичны. Если условие a истинно, тогда логика в первом состоянии if будет выполнена, и функция вернется. Тем не менее, есть более близкий взгляд на второй сценарий:

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 

Прямо сейчас, если первый if огонь, функция будет возвращать, иначе c бы выполнить. Однако учтите, что в какой-то момент вниз по линии программист решает реорганизовать метод по какой-либо причине. Если он должен был вынуть инструкцию return, то логика для c будет также выполнить, если a были истинными. Это может показаться надуманным, но это может произойти более легко, чем вы думаете. С другой стороны, если вы используете полный if-else, то даже рефактору состояния if никогда не будет приводить к логической оценке c одновременно.

Смежные вопросы