Проверка и возврат в начале функции против вложенности, если

0

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

Середина опции B может быть помещена внутри функции, чтобы удалить вложенность.

Вариант A.

void func(A * a, B * b)
{
  if (a == NULL) { return; }
  if (b == NULL) { return; }
  // Do some stuff
}

или вариант B.

void func(A * a, B * b)
{
  if (a != NULL) 
  { 
    if (b != NULL) 
    { 
       // Do some stuff
    }
  }
}

Я думаю, что согласованность, вероятно, самая важная. Есть ли что-то, что я пропускаю, что дает один вариант существенных преимуществ по сравнению с другим?

благодаря

  • 1
    Это действительно 95% мнений. В моем случае однократное возвращение - это не цель, к которой нужно стремиться, а низкий отступ, так что вариант А намного лучше, но это только мое мнение.
  • 0
    безусловно, вариант А
Показать ещё 2 комментария
Теги:
design-patterns

2 ответа

3
Лучший ответ

Нет объективного, технического аргумента убийцы, чтобы один вариант превосходил другого, так что это действительно сводится к мнению. Вы предпочитаете низкий отступ или предпочитаете одиночный возврат?

В некоторых случаях, возможно, одна версия запрещает RVO для компилятора. Но что касается этого.

1

в опции A вы можете просто щелкнуть, если любой из двух имеет значение null в single if (...) как:

void func(A * a, B * b)
{
  if (a == NULL || b == NULL) { return; }
  // Do some stuff
}
  • 0
    Это должен быть комментарий, а не ответ.
  • 0
    И на самом деле этот вид подходит для обоих вариантов А и В.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню