Equivalente dei principi SOLID per la programmazione funzionale


36

Ho trovato i principi SOLID abbastanza utili quando si pensa al design orientato agli oggetti.

Esiste un insieme simile / equivalente di principi indipendenti dalla lingua su misura per la programmazione funzionale?


12
FWIW, questo è stato discusso brevemente su SO un anno fa
— StuartLC


Questo video e queste diapositive presentano i principi SOLID applicati alla programmazione funzionale. Entrambi usano il linguaggio Clojure come esempio, ma i principi valgono in altre lingue.
— mascip,


Risposte:


14

È un po 'difficile trovare equivalenti ma posso provare:

  • S (SRP) in FP una funzione crea SEMPRE lo stesso output per gli stessi argomenti, questo è chiamato trasparenza referenziale
  • O (OCP) in FP esiste un concetto chiamato tipi di dati algebrici, dai un'occhiata a come si relaziona con le gerarchie di classi e quale problema entrambi cercano di risolvere 1
  • L (LSP) Il principio di sostituzione di Liskov è Contravarianza 2
  • D (DIP) nella programmazione funzionale generale raggiunge l'astrazione attraverso la composizione della funzione, ci sono anche altri meccanismi con l'aiuto della teoria delle categorie (ad esempio monoide o functor), per "Iniezione delle dipendenze" 3

21
Sto ancora pensando a come sei passato dal principio della responsabilità singola alla trasparenza referenziale . Quei due sono indipendenti. SRP riguarda una funzione che ha un unico scopo. Può essere o meno trasparente dal punto di vista referenziale al riguardo.
— Goran Jovic,

3
Ah, mio ​​male - lo capisco ora. Questi sono equivalenti nel senso di essere principi e formare lo stesso acronimo, non nel senso di significare la stessa cosa o qualcosa di simile. Ci scusiamo per il downvote!
— Goran Jovic,

1
Esatto, questo è il modo previsto per leggerlo. Ho provato a descrivere una mappatura per quei termini nel contesto di fp.
— AndreasScheinert,

Amico che non puoi modificare un commento, in effetti le cose DOVREBBERO significare almeno qualcosa di simile.
— AndreasScheinert,

Forse le funzioni di ordine superiore possono fornire un tipo di iniezione di dipendenza: si inietta una funzione concreta come parametro in una funzione generica (di ordine superiore).
— Giorgio,

45

SOLID risulta essere una buona idea anche per i regni funzionale / imperativo.

SRP : "Solo una cosa" è stata presa in primo luogo dalla programmazione imperativa. Avere funzioni piccole e mirate è buono.

OCP - Permettere di cambiare comportamento senza modificare il codice è buono. La programmazione funzionale utilizza funzioni di ordine superiore più dell'ereditarietà, ma il principio vale.

LSP - Rispettare alcuni contratti di interfaccia è altrettanto utile nella programmazione funzionale quanto nell'orientamento agli oggetti. Se una funzione di ordinamento accetta un comparatore, allora ci si aspetterebbe che il comportamento "0 sia uguale a, inferiore a fornisce risultati negativi, maggiore di risultati positivi".

ISP - La maggior parte dei linguaggi funzionali ha ancora delle strutture. Specificare il set di dati più piccolo richiesto da una funzione è ancora una buona pratica. Richiedere l'interfaccia meno specifica per i dati (perché usare Elenchi di ints quando funzionano anche le enumerazioni di T?) È ancora una buona pratica.

DIP - Specificare i parametri per una funzione (o una funzione di ordine superiore per recuperarli) piuttosto che codificare a fondo la funzione per ottenere un valore è altrettanto utile nella programmazione funzionale quanto nell'orientamento agli oggetti.

E anche quando si esegue una programmazione orientata agli oggetti, molti di questi principi si applicano anche alla progettazione di metodi negli oggetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.