Probabilmente. Il cervello umano ha uno spazio limitato nello stack, rendendo difficile gestire strutture profondamente annidate. Tutto ciò che appiattisce le informazioni che ci aspettiamo di analizzare rende più facile la comprensione.
Allo stesso modo, io di solito preferisco questo:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
}
/* Do some work */
return true;
}
A tal:
bool foo(int arg)
{
if(!arg) {
/* arg can't be 0 */
return false;
} else {
/* Do some work */
return true;
}
}
O peggio, a questo:
bool foo(int arg)
{
if(arg) {
/* Do some work */
return true;
} else {
/* arg can't be 0 */
return false;
}
}
Nell'ultimo esempio, la parte che fa il lavoro potrebbe essere piuttosto lungo. Quando il lettore arriva alla clausola else, potrebbe non ricordare come è arrivato.
Mettere il bail out condizioni come vicino all'inizio aiuta ad assicurare che le persone che cercano di richiamare le funzioni avranno una buona idea di ciò che immette la funzione si aspetta.
Inoltre, come altri hanno sottolineato, il continuo chiarisce che non è necessario leggere ulteriormente nel codice all'interno del ciclo per determinare se ulteriori operazioni vengono eseguite dopo quel punto per questo caso, rendendo il codice più facile da seguire . Di nuovo, meno cose costringi il lettore a tenere traccia di, meglio è.
fonte
2009-05-25 20:11:56
Questo è discutibile - dipende dal fatto che questo idioma sia comune nel codice. Se non lo è, ha lo svantaggio di essere un modo un po 'insolito per controllare un loop e un potenziale problema di manutenzione/origine bug. –
sì, è abbastanza corretto. Le persone non abituate a questo idioma possono essere confuse di fronte a mantenerlo. È proprio quello a cui sono abituato e che le euristiche mi hanno insegnato è meglio. Per me è più facile perdersi in blocchi nidificati di if-then-else, quindi notare una pausa; o continua; –