Mi piace molto il paradigma della programmazione funzionale, ma non sono ancora sicuro su come progettare un progetto di piccole / medie dimensioni con esso.
Quando uso OO, ho un insieme di entità etichettate (classi) con confini chiaramente definiti. Posso ragionare su cose come:
- che cosa sta facendo questa classe?
- dovrei inserire questo codice all'interno o al di fuori di una classe?
- dovrei dividere questa classe in due?
- in che modo un cliente vorrebbe utilizzare questa classe?
Quindi un grande vantaggio delle classi è che forniscono boundaries per un pezzo di funzionalità. Trovo che questo aiuti molto quando si progetta un'applicazione.
Nella programmazione funzionale, tutto sembra riguardare la composizione e l'astrazione di funzioni e strutture dati. Le classi di tipi in haskell sono principalmente lì per offrire il polimorfismo. Lo stesso vale per i prototipi in clojure.
Quando si progetta un'applicazione scritta in uno stile funzionale, qual è una buona "unità di funzionalità" su cui è possibile definire, etichettare e ragionare?