Come hanno sottolineato le persone, questo migliora la leggibilità. Una persona che legge process_url()
può vedere più chiaramente qual è il processo generale per gestire gli URL semplicemente leggendo alcuni nomi di metodi.
Il problema è che altre persone potrebbero pensare che quelle funzioni siano usate da qualche altra parte del codice, e se alcune di esse devono essere cambiate, possono scegliere di conservare quelle funzioni e definirne di nuove. Ciò significa che alcuni codici diventano irraggiungibili.
Ci sono diversi modi per affrontarlo. Il primo è la documentazione e i commenti nel codice. In secondo luogo, strumenti che forniscono test di copertura. In ogni caso, in gran parte ciò dipende dal linguaggio di programmazione, queste sono alcune delle soluzioni che puoi applicare a seconda del linguaggio di programmazione:
- i linguaggi orientati agli oggetti possono consentire di definire alcuni metodi privati, per garantire che non vengano utilizzati altrove
I moduli - in altre lingue possono specificare quali funzioni sono visibili dall'esterno, ecc.
- linguaggi di altissimo livello come Python possono eliminare la necessità di definire diverse funzioni perché sarebbero comunque semplici one liners
- altri linguaggi come Prolog possono richiedere (o suggerire strongmente) la definizione di un nuovo predicato per ogni salto condizionato.
- in alcuni casi è comune definire funzioni ausiliari all'interno della funzione che le utilizza (funzioni locali), a volte queste sono funzioni anonime (chiusure di codice), questo è comune nelle funzioni di callback di Javascript.
Quindi, in breve, la suddivisione in diverse funzioni è solitamente una buona idea in termini di leggibilità. Potrebbe non essere molto utile se le funzioni sono molto brevi e questo crea l'effetto goto
o se i nomi non sono realmente descrittivi, in questo caso la lettura di un codice richiederebbe un salto tra le funzioni, che potrebbe essere disordinato. Per quanto riguarda la tua preoccupazione per l'ambito e l'utilizzo di queste funzioni, ci sono diversi modi per affrontarlo che dipendono in generale dalla lingua.
In generale il miglior consiglio è usare il buon senso. Ogni regola rigida è molto probabile che sia sbagliata in alcuni casi e alla fine dipende dalla persona. Considero questo leggibile:
process_url = lambda url: dict(re.findall('([^?=&]*)=([^?=&]*)', url))
Personalmente preferisco un solo liner anche se è leggermente complesso piuttosto che saltare e cercare tra diversi file di codice, se mi ci vogliono più di tre secondi per trovare qualche altra parte di codice che posso non so nemmeno cosa stavo controllando comunque. Le persone che non soffrono di ADHD possono preferire nomi più esplicativi che possano ricordare, ma alla fine ciò che si sta facendo è bilanciare la complessità nei diversi livelli di codice, linee, paragrafi, funzioni, file, moduli, ecc.
Quindi la parola chiave è equilibrio . Una funzione con mille linee è un inferno per chiunque la legga, perché non c'è incapsulamento e il contesto diventa troppo grande. Una funzione suddivisa in mille funzioni ciascuna con una riga potrebbe essere peggio:
- hai alcuni nomi (che potresti aver fornito come commenti nelle linee)
- stai (si spera) eliminando le variabili globali e non devi preoccuparti dello stato (avere trasparenza referenziale)
- ma costringi i lettori a saltare avanti e indietro.
Quindi non ci sono proiettili d'argento qui, ma esperienza ed equilibrio. IMHO il modo migliore per imparare come farlo è leggere un sacco di codice scritto da altre persone e analizzare perché è difficile leggerlo e renderlo più leggibile. Ciò fornirebbe un'esperienza preziosa.