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

If-> return vs. if-> else эффективность

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

а.

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

В.

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

Ответ 1

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

Ответ 2

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

Ответ 3

Настоящий вопрос в том, должно ли тебя это волновать?

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

Ответ 4

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

Несколько соображений по стилю:

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

А:

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

В:

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

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

    ....
 }

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

Ответ 5

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

Ответ 6

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

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