Che cos'è una funzione di prima classe?
"Funzione di prima classe" è un termine che può essere applicato nella programmazione informatica e informatica a un linguaggio di programmazione informatica se il suo trattamento delle funzioni aderisce a una serie di linee guida, sebbene la 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 possibilità 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 ciò che 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 di runtime.
Quando il termine "funzione" viene utilizzato in un senso vagamente definito, il concetto di passare una funzione all'interno di un programma attraverso variabili non è necessariamente univoco per i linguaggi che implementano nativamente il supporto di funzioni di prima classe. La capacità di passare blocchi di codice a 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 funzione di prima classe, tuttavia, è che la gestione delle funzioni come variabili deve essere eseguita in modo nativo, senza l'uso di metadati come definiti condizionali e senza chiamare un compilatore per ricompilare un pezzo di codice. Il termine "funzione" è anche usato per riferirsi a blocchi di codice indipendenti chiamati da soli, nel senso che non includono i blocchi di codice noti come metodi in linguaggi di programmazione orientati agli oggetti o i blocchi a volte chiamati procedure in altri linguaggi.
Quando una lingua è progettata per consentire un codice funzione di prima classe, alcuni modelli di progettazione possono essere implementati più direttamente rispetto ad altre lingue. Una funzione può ricevere una funzione come variabile, quindi costruire una nuova funzione e restituire la nuova funzione al codice chiamante, quindi questo crea un meccanismo per la creazione di runtime 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 che sono in grado di auto-modificare le loro equazioni mentre progrediscono. Un uso simile e più avanzato per meccanismi di prima classe è l'implementazione del polimorfismo nelle lingue in cui non è specificamente implementato. Ciò può consentire alle funzioni di essere chiamate con la stessa firma della funzione ma di eseguire il codice in base al contesto in cui è stata chiamata, talvolta passando una funzione chiave alla funzione polimorfica.