Domanda

Questo può essere un ossimoro, ma come si aggiorna un'entità dati nello stile di programmazione funzionale? Da quanto ho letto, la programmazione in stile funzionale utilizza trasformazioni per restituire un output su entità immutabili. L'unica cosa che mi viene in mente sarebbe quella di sostituire completamente l'entità originale, ma sembra quasi la stessa di un approccio di aggiornamento classico.

È stato utile?

Soluzione

Stai parlando di entità del database del disco o strutture di dati in memoria.

Per quest'ultimo, i linguaggi funzionali utilizzano strutture di dati persistenti, implementate in modo tale che la nuova versione e la vecchia versione siano entrambe disponibili dopo l'aggiornamento, ma condividano parti comuni (in modo che sia efficiente). Quindi sembra che tu stia restituendo una struttura di dati totalmente nuova, ma in realtà condivide la maggior parte della sua implementazione con quella che stava modificando.

Ci sono alcune implementazioni davvero buone da guardare nella fonte del clojure (scritta in Java) - Ne ho fatte due sul mio blog

http: //www.loufranco .com / blog / files / 20-giorni-di-Clojure-Day-7.html

http: //www.loufranco .com / blog / files / 20-giorni-di-Clojure-Day-8.html

Altri suggerimenti

Lou Franco ce l'ha. Le strutture di dati nei linguaggi funzionali sono implementate in modo tale che per modificarle, "sostituisci completamente" l'entità originale. Dietro le quinte, usano ancora la maggior parte di quella vecchia: sostituiscono solo i bit modificati. Anche la vecchia versione esiste ancora, ma la garbage collection alla fine la distruggerà finché nessuno lo farà riferimento.

La risposta breve è che nello stile funzionale ogni entità di dati sarebbe immutabile, quindi un aggiornamento è in realtà una nuova entità di dati con il valore aggiornato, un po 'come il funzionamento delle stringhe in .NET.

Le vere sfide interessanti si presentano quando si ha a che fare con IO, diventa difficile modellare l'I / O in un modo puramente funzionale che porta a soluzioni alternative come Monadi .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top