it-swarm-id.com

Kapan fitur dianggap sebagai "warga negara kelas satu" dalam bahasa pemrograman / platform?

Saya telah melihat berkali-kali pernyataan seperti- "Tolong jadikan fitur ini sebagai warga negara kelas satu dalam bahasa dan platform". Misalnya, dikatakan tentang enum di C # /. Net. Jadi, kapan fitur dianggap sebagai "warga negara kelas satu" dalam bahasa pemrograman/platform?

64
Gulshan

Definisi

Objek adalah kelas ketika itu:

  • dapat disimpan dalam variabel dan struktur data
  • dapat dikirimkan sebagai parameter ke subrutin
  • dapat dikembalikan sebagai hasil dari subrutin
  • dapat dibangun saat runtime
  • memiliki identitas intrinsik (terlepas dari nama yang diberikan)

Istilah "objek" digunakan secara longgar di sini, tidak harus merujuk ke objek dalam pemrograman berorientasi objek. Tipe data skalar yang paling sederhana, seperti bilangan integer dan floating-point, hampir selalu kelas satu.

http://en.wikipedia.org/wiki/First_class_object

42
Waquo

Gagasan "warga negara kelas satu" atau "elemen kelas satu" dalam bahasa pemrograman diperkenalkan oleh ilmuwan komputer Inggris Christopher Strachey pada 1960-an dalam konteks pertama fungsi kelas. Formulasi paling terkenal dari prinsip ini mungkin di 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 dengan elemen bahasa pemrograman ini segala sesuatu yang dapat Anda lakukan 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, Java operator dan Java metode 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. berarti, bertentangan dengan kepercayaan populer, Java tidak mendukung operator overloading: misalnya, + operator kelebihan beban untuk byte, short, int, long, float, double dan String, dan IIRC di Java 7 juga untuk BigInteger dan BigDecimal (dan mungkin pasangan saya lupa), hanya saja Anda tidak memiliki pengaruh terhadapnya. Itu jelas membuat operator kelas dua sesuai dengan definisi kedua ini. Perhatikan bahwa metode masih bukan objek kelas satu menurut definisi pertama. (Apakah itu membuat operator kelas tiga?)

33
Jörg W Mittag

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. Misalnya instance dari kelas akan menjadi warga negara kelas pertama di c ++ atau Java, tetapi fungsi di C tidak akan.

6
Pemdas

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 oleh bahasa secara langsung tetapi memerlukan penggunaan fitur bahasa lainnya. Mengikat parameter ke suatu fungsi tidak secara langsung didukung dan Anda harus membangun functor untuk mengimplementasikan fitur ini.

1
Martin York