La nozione di "cittadino di prima classe" o "elemento di prima classe" in un linguaggio di programmazione fu introdotta dallo scienziato informatico britannico Christopher Strachey negli anni '60 nel contesto di funzioni di prima classe. La formulazione più famosa di questo principio è probabilmente nella struttura e interpretazione dei programmi per computer di Gerald Jay Sussman e Harry Abelson:
- Possono essere nominati da variabili.
- Possono essere passati come argomenti alle procedure.
- Possono essere restituiti come risultato delle procedure.
- Possono essere inclusi in strutture di dati.
Fondamentalmente, significa che puoi fare con questo elemento del linguaggio di programmazione tutto ciò che puoi fare con tutti gli altri elementi nel linguaggio di programmazione.
Si tratta di "pari diritti": puoi fare tutto quanto sopra, con, diciamo, numeri interi, quindi perché qualsiasi altra cosa dovrebbe essere diversa?
La definizione sopra è un po 'restrittiva, nel senso che parla solo dell'aspetto di prima classe in relazione all'essere oggetti del programma. Una definizione più generale sarebbe che una cosa è di prima classe se puoi fare tutto ciò che puoi fare anche con altre cose di tipo simile.
Ad esempio, gli operatori Java e i metodi Java sono di tipo simile. Puoi definire nuovi metodi, puoi (in qualche modo) scegliere liberamente i nomi dei tuoi metodi, puoi sovrascrivere i metodi, puoi sovraccaricare i metodi. James Gosling può fare tutto questo anche con gli operatori, ma tu e io no. Voglio dire, contrariamente alla credenza popolare, Java fa operatore di supporto sovraccarico: per esempio, l' +
operatore viene sovraccaricato per byte
, short
, int
, long
, float
, double
e String
, e IIRC in Java 7 anche per BigInteger
e BigDecimal
(e probabilmente un paio ho dimenticato), è solo che tenon ha alcuna influenza su di esso. Ciò rende chiaramente gli operatori di seconda classe secondo questa seconda definizione. Tuttavia, i metodi non sono ancora oggetti di prima classe secondo la prima definizione. (Questo rende gli operatori di terza classe?)