Saya telah melihat berkali-kali pernyataan seperti- "Tolong jadikan fitur ini sebagai warga negara kelas satu dalam bahasa dan platform". Sebagai contoh, dikatakan tentang enum di C # /. Net. Jadi, kapan fitur dianggap sebagai "warga negara kelas satu" dalam bahasa pemrograman / platform?
language-features
Gulshan
sumber
sumber
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:
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 untukbyte
,short
,int
,long
,float
,double
danString
, dan IIRC di Jawa 7 juga untukBigInteger
danBigDecimal
(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?)sumber
Biasanya ini merujuk pada konstruk yang dapat dilewati sebagai parameter, dapat didefinisikan sebagai tipe pengembalian dari suatu fungsi atau dapat diberi nilai. Biasanya Anda harus dapat membangunnya saat runtime. Sebagai contoh turunan dari kelas akan menjadi warga negara kelas pertama di c ++ atau java, tetapi fungsi di C tidak akan.
sumber
Saya akan mengatakan fitur adalah warga negara kelas satu jika diterapkan semata-mata oleh bahasa.
yaitu tidak memerlukan fitur banyak bahasa atau pustaka standar untuk mengimplementasikan fitur itu.
Contoh:
Dalam C / C ++ saya tidak menganggap fungsi sebagai warga negara kelas satu (orang lain mungkin).
Ini karena ada cara untuk memanipulasi fungsi yang didukung secara langsung oleh bahasa tetapi memerlukan penggunaan fitur bahasa lainnya. Mengikat parameter ke suatu fungsi tidak secara langsung didukung dan Anda harus membangun functor untuk mengimplementasikan fitur ini.
sumber
Untuk menambahkan contoh ke jawaban yang sudah disediakan:
Di WCF / C # Anda saat ini harus menandai objek kelas dengan atribut kontrak layanan agar beroperasi sebagai layanan. Tidak ada yang namanya:
Kelas adalah warga negara kelas satu di c #, di mana layanan tidak.
Semoga ini membantu
sumber