Che cos’è una funzione di prima classe?

“Funzione di prima classe” è un termine che può essere applicato nella programmazione informatica e nell’informatica a un linguaggio di programmazione per computer se il suo trattamento delle funzioni aderisce a una serie di linee guida, sebbene l’intera portata e la profondità di queste linee guida non siano formalmente concordate . Per avere un linguaggio di programmazione per computer di prima classe, la caratteristica principale che deve essere supportata è la capacità di passare funzioni come argomenti ad altre funzioni. Inoltre, una funzione deve poter essere assegnata a una variabile in modo che possa essere memorizzata. Altre proprietà utilizzate per determinare cosa costituisce una funzione di prima classe includono la capacità di generare dinamicamente una funzione in fase di esecuzione e la capacità del linguaggio di avere una funzione come valore di ritorno di un’altra funzione. I linguaggi che supportano l’architettura delle funzioni di prima classe consentono un alto livello di astrazione e, in alcuni casi, forniscono anche un meccanismo per la generazione di codice dinamico in fase di esecuzione.

Quando il termine “funzione” viene utilizzato in un senso genericamente definito, il concetto di passare una funzione all’interno di un programma attraverso variabili non è necessariamente esclusivo dei linguaggi che implementano in modo nativo il supporto di funzioni di prima classe. La capacità di passare blocchi di codice alle funzioni o di restituire codice non dinamico da una funzione può essere facilmente eseguita in molti linguaggi di programmazione attraverso meccanismi diversi. Una delle parti rigorose della definizione di un linguaggio di funzioni di prima classe, tuttavia, è che la gestione delle funzioni come variabili deve essere eseguita in modo nativo, senza l’uso di metadati come le definizioni condizionali e senza chiamare un compilatore per ricompilare un pezzo di codice. Il termine “funzione” viene anche utilizzato per riferirsi a blocchi di codice indipendenti che vengono chiamati da soli, nel senso che non includono i blocchi di codice noti come metodi nei linguaggi di programmazione orientati agli oggetti o i blocchi a volte chiamati procedure in altri linguaggi.

Quando un linguaggio è progettato per consentire codice funzione di prima classe, alcuni modelli di progettazione possono essere implementati in modo più diretto rispetto ad altri linguaggi. Una funzione può ricevere una funzione come variabile e quindi costruire una nuova funzione e restituire la nuova funzione al codice chiamante, quindi questo crea un meccanismo per la creazione in fase di esecuzione del codice del programma. Ciò può anche rendere possibile l’uso di funzioni immesse dall’utente in tempo reale all’interno del linguaggio senza l’uso di processi come la riflessione o la valutazione.

Alcuni degli usi più basilari per l’architettura di funzioni di prima classe includono la creazione di funzioni generiche che possono essere facilmente riutilizzate e l’implementazione di algoritmi matematici ricorsivi in ​​grado di modificare automaticamente le proprie equazioni man mano che progrediscono. Un uso simile e più avanzato per i meccanismi di prima classe è l’implementazione del polimorfismo in linguaggi in cui non è implementato in modo specifico. Ciò può consentire di chiamare funzioni con la stessa firma della funzione ma eseguire codice in base al contesto in cui è stato chiamato, a volte passando una funzione chiave alla funzione polimorfica.