Явно или неявно возвращают?


Рассмотрим следующие два примера кода:

1.

void foo(boolean cake) {
    if (!cake)
        return;

    // TODO some work.
}


2.

void bar(boolean cake) {
    if (cake)
        //TODO some work.
}

Какой из них является наиболее читаемым/ семантические правильно? С первым примером вам избежать дополнительных отступов на ниже код.

Надо вернуться прямо сейчас, когда нет торта или нет?



635
14
задан 21 мая 2011 в 09:05 Источник Поделиться
Комментарии
3 ответа

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

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

Я пришел к этому выводу сам, но хорошие книги, как чистый код Роберт С. Мартин скажет вам то же самое.

19
ответ дан 21 мая 2011 в 09:05 Источник Поделиться

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

void foo(boolean cake) {
if (!cake)
return;

// TODO some work.
}

Указывает на то, что !торт является непременным условием и, как таковая, является незначительным, что функция делает.

void bar(boolean cake) {
if (cake)
//TODO some work.
}

Указывает на то, что торт является важной частью того, что функция делает.

20
ответ дан 23 мая 2011 в 02:05 Источник Поделиться

Первый подход-это так называемый охранник. Смотрите эту статью Джефа Этвуда.


Заменить условия со служебными положениями. Этот код..

if (SomeNecessaryCondition) {
// function body code
}


.. лучше работает в качестве пункта охраны:

if (!SomeNecessaryCondition)
{
throw new RequiredConditionMissingException;
}
// function body code

5
ответ дан 24 марта 2013 в 02:03 Источник Поделиться