È stata introdotta la nozione di "cittadino di prima classe" o "elemento di prima classe" in un linguaggio di programmazione dallo scienziato informatico britannico Christopher Strachey negli anni '60 nel contesto delle funzioni di prima classe. La formulazione più famosa di questo principio è probabilmente in Struttura e interpretazione dei programmi per computer di Gerald Jay Sussman e Harry Abelson:
- They may be named by variables.
- They may be passed as arguments to procedures.
- They may be returned as the results of procedures.
- They may be included in data structures.
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 "diritti uguali": puoi fare tutto quanto sopra, con, per esempio, numeri interi, quindi perché un'altra cosa dovrebbe essere diversa?
La definizione di cui sopra è un po 'restrittiva nel senso che parla solo dell'aspetto della prima classe in relazione all'essere oggetti del programma. Una definizione più generale sarebbe che una cosa è di prima classe se puoi fare tutto con essa puoi fare anche con altre cose di tipo simile.
Ad esempio, gli operatori Java e i metodi Java sono di tipo simile. È possibile definire nuovi metodi, è possibile (in qualche modo) scegliere liberamente i nomi dei propri metodi, è possibile sovrascrivere i metodi, è possibile sovraccaricare i metodi. James Gosling può fare tutto questo anche con gli operatori, ma tu e io non possiamo. Voglio dire, contrariamente alla credenza popolare, Java supporta l'overloading dell'operatore: ad esempio, l'operatore +
è sovraccarico per byte
, short
, int
, long
, float
, double
e String
e IIRC in Java 7 anche per BigInteger
e BigDecimal
(e probabilmente una coppia che ho dimenticato), è solo che tu non hai alcuna influenza sopra. Ciò rende chiaramente gli operatori di seconda classe in base a questa seconda definizione. Nota che i metodi non sono ancora oggetti di prima classe secondo la prima definizione, però. (Questo rende gli operatori di terza classe?)