Una chiacchierata sulla programmazione funzionale

Prima di continuare con la pubblicazione di altri frammenti di codice F# vorrei fare alcune considerazioni su F#, sulla programmazione funzionale e sul perché questa è così importante.

Molti hanno letto o sentito dire che F# deriva da FORTRAN e che quindi è fortemente predisposto alla soluzione di problemi matematici e scientifici. Queste considerazioni sono vere e inconfutabili, ma F# può esprimere molto di più: non solo programmi matematici e scientifici, ma tutta la gamma possibile di applicazioni, praticamente alla stregua di C# e Visual Basic .NET.

Anzi, con l’aggiunta del paradigma della programmazione funzionale che è strettamente legato a F#, quest’ultimo linguaggio può fare molto di più dei suoi “cugini” e con molto meno codice.

Ovviamente la programmazione funzionale, da sola, non poteva esprimere alcuni costrutti che in un’applicazione del mondo reale sono essenziali, come la gestione di risorse del computer, le comunicazioni in rete e molto altro. Ecco perché F#, al contrario di altri linguaggi funzionali, permette di utilizzare tutti gli elementi del Framework .NET: namespace, classi, interfacce, oggetti, attributi ecc. ecc.. F# quindi non è un “puro” linguaggio funzionale, ma questo non è un limite, ma bensì la sua forza.

Una volta che si sono appresi alcuni elementi del linguaggio e che si è visto cosa si può fare con F#, anche le ultime “resistenze mentali” cadono e si riesce finalmente ad apprezzare tutta la potenza di questo linguaggio.

Perfino la sua propensione a risolvere molti problemi con la ricorsività e il fatto che l’assegnazione di variabili non è la cosa più importante di questo linguaggio, alla fine vengono accettati con piacere, vedendo quanto F# è coerente e pulito e con quante istruzioni in meno si risolve lo stesso problema. Meno istruzioni = “meno codice” = meno tempo perso a scrivere codice = meno errori = meno tempo perso per correggere gli errori. Tutto questo senza però perdere chiarezza e comprensione del codice.

Ovviamente tutto questo ha un prezzo: un altro linguaggio da imparare, un altro paradigma di programmazione da conoscere. Per chi conosce già altri linguaggi (magari PIU’ di un linguaggio), questo non è un problema: come si sono imparati i linguaggi precedenti, più facilmente si imparerà questo nuovo linguaggio.

E’ anche un linguaggio adatto alla didattica (non è un caso che sia stato adottato in diversi corsi universitari), ma anche al mondo reale dello sviluppo di software di vario genere: applicazioni desktop, client-server, ASP.NET, Windows Azure, Windows Phone 7, scripting ecc. ecc.

Nella programmazione funzionale tutto è una funzione: anzi, sparisce completamente la differenza tra valori e funzioni, dove le funzioni stesse sono trattate come valori (o i valori sono trattati come funzioni…). Possiamo così concatenare più funzioni, per ottenere un risultato corretto con minori ostacoli e con maggiore efficienza.

Le funzioni, poi, vanno ancora oltre: quando una funzione richiede argomenti multipli, possiamo passare alla funzione stessa anche un insieme di argomenti inferiore a quello richiesto. La valutazione della funzione rimarrà in sospensione finché non forniremo gli argomenti mancanti. Una funzione, poi, può restituire anche più valori alla funzione chiamante, la quale è libera di utilizzarli come meglio crede.

Una domanda che mi è stata fatta in un evento tecnico è questa: le caratteristiche della programmazione funzionale saranno portate, prima o poi, anche nei linguaggi tradizionali come C# e VB.NET? La risposta è sì… anzi, alcune caratteristiche ci sono già: per esempio la programmazione parallela e le istruzioni asincrone (Async).

L’estensione “funzionale” più conosciuta che già esiste in C# e in VB.NET è LINQ: una libreria per l’accesso ai dati che ha forti caratteristiche funzionali. Allo stesso modo la programmazione parallela è già stata introdotta nel nuovo Framework .NET ed è utilizzabile dai nostri cari “vecchi” linguaggi .NET.

Insomma, F# è il precursore dei tempi e chi lo utilizza è già nel futuro. Adottatelo come un cucciolo: è molto affettuoso e fedele e vi sarà di piacevole compagnia!

Annunci

Pubblicato il 6 maggio 2015 su Novità. Aggiungi ai preferiti il collegamento . Lascia un commento.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: