Gagasan "warga negara kelas satu" atau "elemen kelas satu" dalam bahasa pemrograman diperkenalkan oleh ilmuwan komputer Inggris Christopher Strachey pada 1960-an dalam konteks fungsi kelas satu. Formulasi paling terkenal dari prinsip ini mungkin dalam Struktur dan Interpretasi Program Komputer oleh Gerald Jay Sussman dan Harry Abelson:
- Mereka dapat dinamai dengan variabel.
- Mereka dapat diteruskan sebagai argumen untuk prosedur.
- Mereka dapat dikembalikan sebagai hasil dari prosedur.
- Mereka dapat dimasukkan dalam struktur data.
Pada dasarnya, ini berarti bahwa Anda dapat melakukan semua elemen bahasa pemrograman ini dengan semua elemen lain dalam bahasa pemrograman.
Ini semua tentang "persamaan hak": Anda dapat melakukan semua hal di atas, dengan, katakanlah, bilangan bulat, jadi mengapa hal lain harus berbeda?
Definisi di atas agak membatasi dalam arti bahwa itu hanya benar-benar berbicara tentang aspek kelas sebagai yang terkait dengan menjadi objek program. Definisi yang lebih umum adalah bahwa sesuatu itu kelas satu jika Anda dapat melakukan semuanya dengan itu Anda juga dapat melakukan dengan hal-hal lain yang sejenis.
Sebagai contoh, operator Java dan metode Java adalah sejenis. Anda dapat mendefinisikan metode baru, Anda dapat (agak) bebas memilih nama-nama metode Anda sendiri, Anda dapat mengganti metode, Anda dapat membebani metode. James Gosling dapat melakukan semua itu dengan operator juga, tetapi Anda dan saya tidak bisa. Maksudku, bertentangan dengan kepercayaan populer, Jawa melakukan operator overloading dukungan: misalnya, +
operator kelebihan beban untuk byte
, short
, int
, long
, float
, double
dan String
, dan IIRC di Jawa 7 juga untuk BigInteger
dan BigDecimal
(dan mungkin beberapa saya lupa), hanya saja Andatidak memiliki pengaruh terhadapnya. Itu jelas membuat operator kelas dua sesuai dengan definisi kedua ini. Perhatikan bahwa metode masih bukan objek kelas satu sesuai dengan definisi pertama. (Apakah itu membuat operator kelas tiga?)