Kapan benda atau sesuatu dikatakan "kelas satu" dalam bahasa pemrograman tertentu, dan mengapa? Dalam apa mereka berbeda dari bahasa di mana mereka tidak?
EDIT. Ketika seseorang mengatakan "semuanya adalah sebuah objek" (seperti dalam Python), apakah ia memang berarti bahwa "semuanya adalah kelas satu"?
python
language-agnostic
Federico A. Ramponi
sumber
sumber
Jawaban:
Singkatnya, itu berarti tidak ada batasan pada penggunaan objek. Itu sama dengan benda lainnya.
Objek kelas pertama adalah entitas yang dapat dibuat secara dinamis, dihancurkan, diteruskan ke fungsi, dikembalikan sebagai nilai, dan memiliki semua hak seperti variabel lain dalam bahasa pemrograman miliki.
Sumber .
Namun, dalam fungsi C ++ sendiri bukan objek kelas satu:
Dalam C ++, kelas bukan objek kelas satu tetapi contoh kelas tersebut. Dalam Python, kedua kelas dan objek adalah objek kelas satu. (Lihat jawaban ini untuk detail lebih lanjut tentang kelas sebagai objek).
Berikut adalah contoh fungsi kelas pertama Javascript:
Sumber .
Entitas yang bukan objek kelas satu disebut sebagai objek kelas dua. Fungsi dalam C ++ adalah kelas dua karena mereka tidak dapat dibuat secara dinamis.
Mengenai hasil edit:
Istilah objek dapat digunakan secara longgar dan tidak menyiratkan menjadi kelas satu. Dan mungkin akan lebih masuk akal untuk menyebut keseluruhan konsep 'entitas kelas satu'. Tetapi dalam Python mereka bertujuan untuk membuat semuanya kelas satu. Saya percaya niat orang yang membuat pernyataan Anda berarti kelas satu.
sumber
"Ketika seseorang mengatakan" semuanya adalah objek "(seperti dalam Python), apakah dia memang bermaksud bahwa" semuanya adalah kelas satu "?"
Iya.
Segala sesuatu di Python adalah objek yang tepat. Bahkan hal-hal yang merupakan "tipe primitif" dalam bahasa lain.
Anda menemukan bahwa objek seperti
2
sebenarnya memiliki antarmuka yang cukup kaya dan canggih.Karena semuanya adalah objek kelas satu di Python, ada beberapa kasus khusus yang relatif tidak jelas.
Di Jawa, misalnya, ada tipe primitif (int, bool, double, char) yang bukan objek yang tepat. Itu sebabnya Java harus memperkenalkan Integer, Boolean, Double, dan Character sebagai tipe kelas satu. Ini bisa sulit untuk diajarkan kepada pemula - tidak jelas mengapa tipe primitif dan kelas harus ada berdampingan.
Ini juga berarti bahwa kelas objek adalah - itu sendiri - objek. Ini berbeda dari C ++, di mana kelas tidak selalu memiliki keberadaan yang berbeda saat run-time.
Tipe
2
adalahtype 'int'
objek, yang memiliki metode, atribut, dan tipe.Jenis tipe bawaan
int
adalahtype 'type'
objek. Ini memiliki metode dan atribut juga.sumber
int
. Jadi "lama" versus "kelas gaya baru" (dan dalam 3, tidak ada kelas gaya lama lagi)."Kelas satu" berarti Anda dapat beroperasi pada mereka dengan cara yang biasa. Sebagian besar waktu, ini hanya berarti Anda dapat melewati warga negara kelas satu ini sebagai argumen untuk suatu fungsi, atau mengembalikan mereka dari fungsi.
Ini jelas untuk objek tetapi tidak selalu begitu jelas untuk fungsi, atau bahkan kelas:
Ini adalah contoh dalam C # di mana fungsi sebenarnya bukan objek kelas satu. Karenanya kode di atas menggunakan solusi kecil (yaitu delegasi generik yang dipanggil
Action<>
) untuk melewatkan fungsi sebagai argumen. Bahasa lain, seperti Ruby, memungkinkan memperlakukan kelas dan blok kode sebagai variabel normal (atau dalam kasus Ruby, konstanta).sumber
Dari slide dalam Struktur dan Interpretasi Program Komputer , kuliah 2A (1986), yang pada gilirannya mengutip Christopher Stracey :
Hak dan hak istimewa warga negara kelas satu:
sumber
IMO ini adalah salah satu metafora yang digunakan untuk menggambarkan hal-hal dalam bahasa alami. Istilah ini pada dasarnya digunakan dalam konteks menggambarkan fungsi sebagai objek kelas satu.
Jika Anda mempertimbangkan bahasa berorientasi objek, kami dapat memberikan berbagai fitur ke objek untuk misalnya: pewarisan, definisi kelas, kemampuan untuk meneruskan ke bagian kode lain (argumen metode), kemampuan untuk menyimpan dalam struktur data dll. Jika kami dapat melakukan sama dengan entitas yang biasanya tidak dianggap sebagai objek, seperti fungsi dalam kasus skrip java, entitas tersebut dianggap sebagai objek kelas satu.
Kelas pertama pada dasarnya di sini berarti, tidak ditangani sebagai kelas kedua (dengan perilaku terdegradasi). Intinya mengejek itu sempurna atau tidak bisa dibedakan.
sumber