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 informatica se il 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 del computer di funzione di prima classe, la caratteristica principale che deve essere supportata è la capacità di passare le funzioni come argomenti ad altre funzioni. Una funzione deve anche essere assegnata a una variabile in modo che possa essere archiviata. 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. Le lingue che supportano l'architettura delle funzioni di prima classe consentono un alto livello di astrazione e anche, in alcuni casi, forniscono 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 unico per le lingue che implementano nativamente il supporto delle funzioni di prima classe. La possibilità di passare blocchi di codice alle funzioni o di restituire un codice non dinamico da una funzione, può essere facilmente eseguita in molti linguaggi di programmazione attraverso diversi meccanismi. Una delle parti rigorose della definizione di un linguaggio della funzione di prima classe, tuttavia, è che la gestione delle funzioni come variabili deve essere eseguita in modo nativo, senza l'uso di metadati come define condizionali e senza chiamare un compilatore per ricompilare un pezzo di codice. Il termine "funzione" viene anche utilizzato per fare riferimento a blocchi di codice indipendenti che vengono chiamati da soli, il che significa che non includono i blocchi di codice noti come metodi nei linguaggi di programmazione orientati agli oggetti o i blocchi talvolta chiamati procedure in altre lingue.
Quando una lingua èProgettato per consentire il codice funzione di prima classe, alcuni modelli di progettazione possono essere implementati più direttamente che in 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 possibili l'uso di funzioni in tempo reale dell'utente all'interno della lingua senza l'uso di processi come la riflessione o la valutazione.
Alcuni degli usi più basilari per l'architettura delle funzioni di prima classe includono la creazione di funzioni generiche che possono essere facilmente riutilizzate e implementare algoritmi matematici ricorsivi che sono in grado di auto-modificare le loro equazioni man mano che progrediscono. Un uso simile e più avanzato per i meccanismi di prima classe è l'implementazione del polimorfismo nelle lingue in cui non è specificamente implementato. Ciò può consentire di chiamare le funzioni con la stessa firma della funzione ma eseguire il codice in base al contesto in WHICh è stato chiamato, a volte passando una funzione chiave alla funzione polimorfica.