Immagina un processo lungo e complicato, che viene avviato chiamando la funzione foo()
. Ci sono diversi passaggi consecutivi in questo processo, ognuno dei quali dipende dal risultato del passaggio precedente. La funzione stessa è, per esempio, circa 250 righe. È altamente improbabile che questi passaggi siano utili da soli, non come parte di questo intero processo.
Lingue come Javascript consentono di creare funzioni interne all'interno di una funzione genitore, che sono inaccessibili alle funzioni esterne (a meno che non siano passate come parametro).
Un mio collega suggerisce che possiamo dividere il contenuto di foo()
in 5 funzioni interne , ogni funzione è un passo. Queste funzioni sono inaccessibili alle funzioni esterne (indicando la loro inutilità al di fuori della funzione genitore). Il corpo principale di foo()
chiama semplicemente queste funzioni interne una per una:
foo(stuff) {
var barred = bar(stuff);
var bazzed = baz(barred);
var confabulated = confabulate(bazzed);
var reticulated = reticulate(confabulated);
var spliced = splice(reticulated);
return spliced;
// function definitions follow ...
}
Questo è un anti-pattern di qualche tipo? O si tratta di un modo ragionevole per suddividere funzioni lunghe? Un'altra domanda è: è accettabile quando si utilizza il paradigma OOP in Javascript? È corretto suddividere il metodo di un oggetto in questo modo oppure garantisce un altro oggetto, che contiene tutte queste funzioni interne come metodi privati?
Vedi anche:
-
È corretto suddividere funzioni e metodi lunghi in quelli più piccoli anche se non verranno chiamati da nessun'altra cosa? - una mia precedente domanda, che conduce a questo.
-
@ KilianFoth's answer a una domanda molto simile che offre una prospettiva diversa rispetto alle risposte date qui.