Caratteristiche di programmazione funzionali, esempi, vantaggi, svantaggi

Caratteristiche di programmazione funzionali, esempi, vantaggi, svantaggi

IL Programmazione funzionale Corrisponde al modello di programmazione che si basa sul concetto di indicare il procedimento di un programma come modello funzionale matematico piuttosto che come sequenze esplicite di istruzioni a un processore, che è il concetto principale nella programmazione imperativa.

Il linguaggio funzionale enfatizza le frasi e i termini invece di eseguire le istruzioni. In questo programma, il risultato dipenderà solo dai parametri che vengono passati a una funzione, a differenza di altri tipi che obbediscono a uno stato locale o globale.

Come funziona la funzione di mappatura nel linguaggio di programmazione funzionale Haskell. Fonte: di Pluke - proprio lavoro, CC0 Commons.Wikimedia.org.

Il suo nome deriva da funzioni matematiche, che sono l'allocazione di un insieme di voci a una serie di output. Una funzione matematica non funziona davvero, ma descrive il modello di un processo, spiegando attraverso una formula cosa produce un insieme di voci in una funzione.

[TOC]

Idee di base

La fondazione su cui si basava la programmazione funzionale era il calcolo Lambda, che fu sviluppato nel terzo decennio del ventesimo secolo per definire e applicare le funzioni. Lisp è stato il primo linguaggio di programmazione di questo tipo, progettato nel 1960.

Sebbene la maggior parte dei linguaggi di programmazione sia costituita da voci esterne, output e variabili che possono essere configurati o utilizzati dalle funzioni, la programmazione funzionale lo impedisce. L'idea è che ogni volta che una funzione viene chiamata con gli stessi parametri, deve restituire lo stesso valore.

Caratteristiche

I linguaggi di programmazione funzionale sono chiamati applicazioni, poiché le funzioni si applicano ai loro parametri, oltre a dichiarazioni e non procedurali, poiché le definizioni specificano ciò che si desidera calcolare e non come viene calcolato.

Funzioni pure

Una funzione è pura quando non ha effetti collaterali osservabili, come l'alterazione delle variabili esterne, le modifiche nel file system, ecc.

Queste funzioni sono considerate convincenti, poiché non cambieranno espressamente alcuna variabile da cui altre parti del codice potrebbero dipendere a un certo tempo. Sembra scomodo codificare con queste restrizioni, ma si dovrebbe considerare che queste funzioni siano deterministiche, prevedibili e componabili.

Funzioni di prima classe

Le funzioni sono considerate come valori che possono essere assegnati alle variabili, in modo che possano passarle e tornare da altre funzioni. Cioè, una funzione può essere usata come se fosse un parametro o come valore che viene restituito.

Ciò implica che la funzione può essere trasmessa come tale, anziché solo il risultato della funzione. Ad esempio, considera la funzione doppia (x), che restituisce il doppio del valore del suo parametro di input. Pertanto, il doppio (2) tornerebbe 4.

Può servirti: Evoluzione della manutenzione industriale: dall'origine al presente

Come è una funzione di prima classe, il codice (doppio (doppio (2)), sarebbe lo stesso del doppio codice (4). Ciò consente di nidificare una funzione come parametro di un altro e così via.

Trasparenza referenziale

Si riferisce al fatto che in questo modello di programmazione non ci sono frasi di assegnazione. Cioè, è necessario definire nuove variabili se si desiderano valori aggiuntivi. Pertanto, lo stato di una variabile è sempre costante.

Ciò elimina la minima possibilità di effetti indesiderati, poiché qualsiasi variabile può essere sostituita dal suo valore reale durante qualsiasi punto di esecuzione del programma.

Ricorsione

Nella programmazione funzionale non ci sono loop "per" e "while". Invece, l'iterazione dipende dalla ricorsione. La ricorsione è implementata utilizzando funzioni ricorsive, che si definiscono ripetutamente fino al raggiungimento del caso di base.

Immutabilità

Le variabili sono immutabili, cioè non è possibile modificare una variabile una volta inizializzata. Sebbene possa essere creata una nuova variabile, le variabili esistenti non sono consentite.

Esempi

Approcci imperativi e dichiarativi

Con un esempio, la differenza tra questi approcci può essere analizzata, eseguendo la stessa operazione in entrambe le disposizioni, che è quella di filtrare i numeri dispari di un elenco mentre i numeri inferiori a 5 sono sostituiti da 5.

È lo stesso calcolo, con lo stesso risultato. Tuttavia, come si può vedere, il codice imperativo è dettagliato e non è chiaro immediatamente. D'altra parte, l'approccio dichiarativo è leggibile ed esplicito, perché si concentra su ciò che si desidera ottenere.

Funzioni pure

Puoi chiarire ciò che è definito come funzioni pure e impure con alcuni esempi di base:

Funzioni come oggetti di prima classe

Significa utilizzare le funzioni allo stesso modo in cui vengono utilizzati i dati. Pertanto, possono passare come parametri a un'altra funzione. Nel seguente esempio è possibile passare la funzione INT come parametro alla funzione MAP:

>>> elenco (mappa (int, ["1", "2", "3"])

[1, 2, 3]

Possono essere assegnati alle variabili e restituirle. Ad esempio, il seguente codice può essere assegnato la funzione Hello_World, quindi eseguendo la variabile come funzione.

Vantaggi

- Concentrati su ciò che vuoi ottenere (dichiarativo) e non su come raggiungerlo (imperativo).

- Non contengono frasi di allocazione, quindi dopo che le variabili ricevono un valore, non cambieranno più. Pertanto, i programmi funzionali non contengono effetti collaterali.

Può servirti: disastri tecnologici

- Il flusso logico è chiaro, poiché lo stato è meno disperso e non è implicitamente modificato.

- Ammette il concetto di valutazione differita, il che significa che il valore viene valutato e memorizzato solo quando necessario.

- Poiché le funzioni pure non cambiano nessuno stato e dipendono completamente dall'ingresso, sono facili da capire. Il valore di ritorno dato da tali funzioni è lo stesso del risultato prodotto da loro.

- A causa della natura delle funzioni pure di prevenire la modifica delle variabili o di eventuali dati esterni, l'implementazione della concorrenza diventa efficace.

- Le funzioni sono trattate come valori, spostandosi su altre funzioni come i parametri. Ciò migliora la comprensione e la leggibilità del codice.

- Le funzioni pure prendono i parametri una volta, producendo un'uscita immutabile. Usando valori inalterabili, la purificazione e i test sono facilitati.

Più corto e più facile da capire

Sono più brevi e più facili da capire che imperativi. Gli studi hanno dimostrato che la produttività media del programmatore in termini di righe di codice è più o meno la stessa per qualsiasi linguaggio di programmazione, che si traduce in maggiore produttività.

Nessun flusso di controllo

Quando si chiama una funzione, non è possibile avere un effetto diverso dal calcolo del suo risultato. Ciò esclude un'importante fonte di errori, rendendo anche irrilevante l'ordine di esecuzione, poiché nessun effetto collaterale può cambiare il valore di un'espressione, essendo in grado di essere valutato in qualsiasi momento.

Il programmatore è placato l'onere di stabilire un flusso di controllo. Poiché le espressioni possono essere valutate in qualsiasi momento, le variabili possono essere sostituite dai loro valori.

Questa autonomia favorisce che i programmi funzionali sono più matematicamente gestibili dei programmi convenzionali.

Svantaggi

- Il paradigma di programmazione funzionale non è semplice, quindi diventa difficile da capire per un principiante.

- È difficile da mantenere, poiché durante la codifica molti oggetti si evolvono.

- In alcuni casi, quando si scrive funzioni pure viene causata una riduzione della leggibilità del codice.

- I valori immutabili in combinazione con ricorsione possono portare a una drastica riduzione delle prestazioni del sistema.

- Il riutilizzo è molto complicato e necessita di refattorizzazione costante.

- Scrivere programmi con uno stile ricorsivo invece di usare legami o loop potrebbe essere un compito molto scoraggiante.

- Gli oggetti potrebbero non rappresentare correttamente il problema.

Può servirti: 50 blog di videogiochi consigliati

- Sebbene la scrittura di funzioni pure si rivelasse semplice, combinarle con il resto dell'applicazione e con le operazioni di input/output è piuttosto difficile

Applicazioni

Il programma di intelligenza artificiale viene condotto in linguaggi di programmazione funzionale e tecniche di intelligenza artificiale migrano verso applicazioni del mondo reale.

Si distingue anche nell'implementazione di modelli matematici complessi. Per questo motivo, uno dei principali usi delle lingue funzionali è stato tradizionalmente accademico. È utile per lo sviluppo di specifiche eseguibili e implementazioni prototipo.

Molti linguaggi funzionali si distinguono anche per implementare l'elaborazione parallela. Ciò è dovuto alla sua capacità di sfruttare le funzioni pure, che restituiscono sempre lo stesso valore indipendentemente dall'ordine in cui vengono eseguite.

Metodologia funzionale

WhatsApp utilizza il linguaggio di programmazione ERLAG, che segue il modello di programmazione funzionale, consentendo a più di cento dei suoi dipendenti di gestire i dati appartenenti a circa 1.600 milioni di persone.

Un altro importante vettore dello stile di programmazione funzionale è Haskell. È utilizzato da Facebook nel tuo sistema antispam. Anche JavaScript, uno dei linguaggi di programmazione più utilizzati, vanta le proprietà di un linguaggio funzionale dinamico.

Linguaggi che supportano la programmazione funzionale

D

È stato progettato dopo C ++, ottenendo tutti i suoi benefici eliminando i suoi punti deboli osservati per essere compatibile con C.

Erlang

È altamente scalabile e concorrente, rendendolo ideale per le telecomunicazioni e altre applicazioni che ricevono enormi quantità di dati in un ordine imprevedibile.

Haskell

Questo è un linguaggio di programmazione funzionale puro, che utilizza il calcolo Lambda per esso.

Ml

È usato in matematica, scientifica, finanziaria, analitica e di altro tipo di altri tipi. Uno dei suoi punti di forza è quello di creare software per gestire altri programmi.

Obiettivo Caml

È un linguaggio open source che si basa su Caml. Tende a creare programmi molto leggeri, aiutandoli a essere caricati ed eseguiti più velocemente di quelli creati da altre lingue.

schema

Si basa sulla sintassi LISP e sulla struttura algol. Grazie alla sua semplicità, viene utilizzato in molti corsi di computer come introduzione alla progettazione di programmi per mostrare alcune delle basi della programmazione informatica.

Riferimenti

  1. WHHO ospita questo (2019). Impara la programmazione funzionale: questo stile di codifica ti farà saltare in aria. Tratto da: whoisostingThis.com.
  2. Andrea Bertoli (2019). Un'adeguata introduzione al programma funzionale. Tratto da: Dev.A.
  3. Hacker Earth (2020). Programmazione funzionale. Preso da: Hakereph.com.
  4. Clojure (2020). Programmazione funzionale. Preso da: Clojure.org.
  5. Akhil Bhadwal (2020). Programmazione funzionale: concetti, avventure, svantaggi e applicazioni. Hackr. Tratto da: hackr.Io.
  6. Guru99 (2020). Cos'è la programmazione funzionale? Con esercitazioni di esempio. Tratto da: Guru99.com.