Più mi dedico a javascript, più rifletto sulle conseguenze di determinate decisioni di progettazione e pratiche incoraggiate. In questo caso, sto osservando funzioni anonime, una funzionalità che non è solo fornita da JavaScript, ma che vedo fortemente utilizzata.funzioni anonime considerate dannose?
Credo che siamo tutti d'accordo sui seguenti fatti:
- la mente umana non si occupa più di 7 più meno di due entità (Miller's law)
- profonda rientranza è considerato bad programming practice, e sottolinea in generale a problemi di progettazione se si indentano più di tre o quattro livelli. Questo si estende alle entità nidificate, ed è ben presentato nella voce Zen di Python "Flat is better than nested."
- l'idea di avere un nome di funzione è sia di riferimento che di facile documentazione dell'attività che esegue. Sappiamo, o possiamo aspettarci, che funzione fa removeListEntry(). Il codice chiaro e autodocumentante è importante per il debug e la leggibilità.
Mentre le funzioni anonime sembrano essere una funzionalità molto carina, il suo uso porta a una progettazione del codice profondamente annidata. Il codice è veloce da scrivere, ma difficile da leggere. Invece di essere costretto a inventare un contesto nominato per una funzionalità e ad appiattire la gerarchia di oggetti callable, incoraggia un "go deep level", spingendo il tuo stack di cervello e traboccando rapidamente la regola 7 +/- 2. Un concetto simile è espresso in "About Face" di Alan Cooper, citando liberamente "le persone non capiscono le gerarchie". Come programmatori comprendiamo le gerarchie, ma la nostra biologia limita ancora la nostra comprensione del nidificazione profonda.
Mi piacerebbe sentirti su questo punto. Le funzioni anonime dovrebbero essere considerate dannose, un apparente zucchero sintattico apparente che in seguito si trova in sale o addirittura veleno per topi?
CW in quanto non esiste una risposta corretta.
Cosa intendi considerando le funzioni anonime come "uno zucchero sintattico"? – day
Preferiresti vedere un altro livello di indentazione per una funzione/lambda one-off o dover trovare dove una funzione non anonima si trova al massimo livello? Se la funzione si trova in una posizione diversa, per me è come se fosse un'entità in più da gestire, in cui, come se fosse in linea, fa parte della stessa entità. Se la tua opinione è che è più difficile leggere il codice con funzioni anonime, la mia opinione è che sei strano – Andy