Следующие два кода имеют одно и то же поведение, и каждый из них имеет свои достоинства: однократное возвращение и глубину вложенности.
Середина опции 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
}
}
}
Я думаю, что согласованность, вероятно, самая важная. Есть ли что-то, что я пропускаю, что дает один вариант существенных преимуществ по сравнению с другим?
благодаря
Нет объективного, технического аргумента убийцы, чтобы один вариант превосходил другого, так что это действительно сводится к мнению. Вы предпочитаете низкий отступ или предпочитаете одиночный возврат?
В некоторых случаях, возможно, одна версия запрещает RVO для компилятора. Но что касается этого.
в опции A вы можете просто щелкнуть, если любой из двух имеет значение null в single if (...) как:
void func(A * a, B * b)
{
if (a == NULL || b == NULL) { return; }
// Do some stuff
}