Linee di codice che assumono troppa responsabilità [chiuso]

1

Intuitivamente, so che (in termini di base di codice comprensibile e gestibile) il seguente codice è una cattiva pratica

var foo = fooFunc(barFunc(),wooFunc(chewFunc()));

e potrebbe essere meglio indicato come

var bar = barFunc();
var chew = chewFunc();
var woo = wooFunc(chew);
var foo = fooFunc(bar, woo);

Questo rende più facile il debug, codice più leggibile ecc. ecc ...

Invece di spiegarlo personalmente ai co-sviluppatori, potrebbe essere meglio indirizzarli a una pagina esistente che spieghi i pericoli di tale costrutto.

Esiste un termine ufficiale per questo tipo di anti-pattern?

    
posta spender 12.08.2015 - 20:12
fonte

1 risposta

6

Il modulo di codice che desideri è chiamato modulo A-normale (ANF); non è sempre più leggibile, ma potrebbe essere più facilmente trasformabile all'interno dei compilatori ed è utile per una precisa garbage collection (di conseguenza, molti compilatori stanno trasformando il codice sorgente in un intermedio ANF). Vedi anche SSA modulo.

Non credo che ANF sia sempre più leggibile; al contrario, la codifica con chiamate di funzioni libere a effetto collaterale nidificato è spesso più facile da capire per IMHO. Ma questa è una questione di opinione, e ovviamente dipende dal contesto. YMMV.

Naturalmente, le cose potrebbero essere diverse se alcune delle funzioni hanno effetti collaterali significativi (ad esempio globali), in particolare perché molti linguaggi di programmazione non specificano un ordine di valutazione degli argomenti.

    
risposta data 12.08.2015 - 20:29
fonte

Leggi altre domande sui tag