if-> return против if-> else эффективность - PullRequest
25 голосов
/ 14 февраля 2012

Это может звучать как глупый вопрос, и я не решался опубликовать его, но все же: если что-то должно работать только в определенном состоянии, какой из них более эффективен:

A.

if (condition) {
   // do
   // things...
}

B.

if (!condition) { return; }
// do
// things...

Ответы [ 6 ]

24 голосов
/ 14 февраля 2012

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

12 голосов
/ 14 февраля 2012

Пожалуйста, выберите наиболее читаемую вещь. Оптимизация производительности на этом уровне вряд ли когда-либо является проблемой. Даже очень чувствительные к производительности части каркасов (такие как .NET Framework) не получают такой микрооптимизации.

7 голосов
/ 14 февраля 2012

Это вещь стиля. Производительность не актуальна; оба производят почти идентичный машинный код.

Несколько соображений по поводу стиля:

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

A

public String getDescription(MyObject obj) {
    if (obj == null) {
        return "";
    } else {
        if (!obj.isValid()) {
            return "invalid";
        } else {
            ...
        }
    }
 }

B

public String getDescription(MyObject obj) {
    if (obj == null) {
        return "";
    }

    if (!obj.isValid()) {
        return "invalid";
    }

    ....
 }

Но разница минимальна, если вы спросите меня. Определенно не стоит «войны в стиле кода».

7 голосов
/ 14 февраля 2012

Реальный вопрос в том, разве это должно вас волновать?

Я говорю НЕТ!Более важно иметь более читаемый код, чем выполнять некоторую микрооптимизацию.

3 голосов
/ 14 февраля 2012

Хотя я согласен с тем, что сначала вам следует выбрать удобочитаемость, я добавлю немного информации: в C # нет никакой разницы. Он компилируется в одно и то же (когда оптимизируется путем создания режима Release). Другие языки? Кто знает, я уверен, что некоторые из них считают это по-другому, но шансы, что вам на самом деле нужно беспокоиться об этом, невелики.

0 голосов
/ 09 января 2019

Производительность более или менее одинакова в обоих случаях.Поэтому это становится больше вопросом стиля или предпочтения.

Я лично предпочитаю писать if -> return, т.е. case B, потому что это делает код более понятным и легко читаемым, особенно если код содержит сложные вложенные условия.

...