Возможно. Человеческий мозг имеет ограниченное пространство стека, что затрудняет работу с глубоко вложенными структурами. Все, что сглаживает информацию, которую мы должны анализировать, облегчает понимание.
Точно так же я обычно предпочитаю это:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
}
/* Do some work */
return true;
}
К этому:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
} else {
/* Do some work */
return true;
}
}
Или, хуже того:
bool foo(int arg)
{
if(arg) {
/* Do some work */
return true;
} else {
/* arg can't be 0 */
return false;
}
}
В последнем примере часть, выполняющая работу, может быть довольно длинной. К тому времени, когда читатель доходит до предложения else, он может не помнить, как он туда попал.
Помещение условий спасения как можно ближе к началу помогает гарантировать, что люди, которые пытаются вызвать ваши функции, будут иметь хорошее представление о том, какие входные данные ожидает функция.
Кроме того, как отмечали другие, оператор continue дает понять, что нет необходимости читать дальше код внутри цикла, чтобы определить, выполняется ли какая-либо дополнительная обработка после этой точки для этого случая, что облегчает выполнение кода. Опять же, чем меньше вы заставляете читателя отслеживать, тем лучше.