In Programmazione funzionale, le funzioni semplici rilevanti per il dominio (ad es., i tipi) devono essere reificate?

3

In un'applicazione funzionale, dovresti racchiudere funzioni comuni di livello superiore nei nomi significativi del dominio o lasciarle "nude"?

Ad esempio, se hai un elenco di indirizzi e "ordinati per codice di avviamento postale" è un dominio comune - ordinamento significativo (mailer mirati, ecc.), è preferibile scrivere:

val sortedCustomers = customers.sort((a,b) => (a.zipCode compareTo b.zipCode) < 0) 

O è meglio creare una funzione sortedByZip(cs : Iterable[Customer]) : Seq[Customer] ?

Creare la funzione ha il vantaggio di essere (minutamente) più astratto, ma ha lo svantaggio di essere opaco, creare un nome da ricordare, ecc.

Mi sto chiedendo nel contesto di una significativa base di codice professionale, quella che intendi vivere per anni, essere il più possibile mantenibile, essere "vera" rispetto alle aspettative dei programmatori funzionali, ecc.

    
posta Larry OBrien 23.02.2012 - 18:41
fonte

2 risposte

3

Dipende (ma poi lo sapevi). Se questo sito di chiamate è l'unico posto in cui vengono ordinati i clienti, allora lo lascerei come è per il momento. Se il codice di ordinamento fosse più complicato (CC > 1), estrarrei sicuramente una funzione per il criterio di ordinamento. Se avessi dieci siti di chiamata come quello sopra, avrei sicuramente una funzione sortedCustomers (). Da qualche parte tra 1 e 10 (in realtà tra 2-4, supponendo che ho notato la duplicazione), estrarrei la funzione.

    
risposta data 23.02.2012 - 20:30
fonte
0

Di solito continuo a fare una distinzione tra ordine di dominio naturale / canonico e ordine arbitrario. Se zipcode è un ordine canonico in questo dominio, scriverei la funzione come: customers.inNaturalOrder ().

Se aggiungi una funzione sortBy puoi avere qualcosa di simile: customers.sortBy (_. zipCode), che legge molto meglio a

Minor nitpick, byZipCode legge come un raggruppamento per me, mi aspetto che restituisca un multimap di zipcode ai clienti.

    
risposta data 23.02.2012 - 23:55
fonte

Leggi altre domande sui tag