Daisy chain quando è chiaro allo sviluppatore successivo perché l'hai fatto in quel modo.
"Code is read more often than it is written." -Guido von Rossum, PEP 008
Non c'è una risposta a questo, ma posso darti una buona regola generale: se il nome della funzione implica che il suo compito è di fare una funzione e chiamarne un'altra, allora è sicuro ricollegarle.
Ci sono momenti in cui due funzionalità hanno davvero bisogno di catena. Considera il classico esempio di gestione degli errori
result = doSomething();
if (result == badValue)
haltAndCatchFire();
Se questo modello si presenta sempre, il prossimo sviluppatore sarà dolorante a leggerlo più e più volte. Peggio ancora, possono diventare pigri o dimenticare, causando risultati inaspettati. Tuttavia, haltAndCatchFire
a sé stante è una funzione piuttosto utile da avere, quindi non vogliamo seppellire quella funzionalità in doSomething
, solo per non vederla più. Come soluzione:
doSomethingOrHaltAndCatchFire();
È lungo, ma ora è molto chiaro che intendi collegare a margherita. Uno sviluppatore che non desidera seguirti in doSomething
generalmente può presumere che chiamerai haltAndCatchFire
se qualcosa va storto, quindi hai trasmesso correttamente le informazioni allo sviluppatore successivo. Possono continuare a leggere main()
senza dover schivare e intrecciare più funzioni.
La scelta dei nomi dipende da te, purché sia chiara. Ad esempio, su una suite di software che ho sviluppato, c'era uno schema:
int getValue();
int tryGetValue();
Si è capito (contratto sociale) che getValue()
dovrebbe chiamare funzioni di gestione delle eccezioni se qualcosa va storto. TryGetValue dovrebbe solo tornare (spesso restituendo un valore fittizio che ci fa sapere che qualcosa è andato storto). Per altre situazioni, in cui il contratto sociale non era così chiaro, abbiamo avuto funzioni come getRegressionResultsForData()
, che ha fatto alcune funzioni per ottenere i dati, quindi chiamato getRegressionResults()
su di esso.
In sintesi, non devi mai concatenare una situazione in cui uno sviluppatore futuro potrebbe essere fuorviante scorrendo su una funzione (invece di immergerti in tutte le sotto-funzioni per cercare le catene).