Setara dengan pointer C pada bahasa lain [ditutup]

Sebagai sarjana Ilmu Komputer, saya memulai dengan C, di mana pointer adalah tipe data yang penting. Setelah itu saya menyentuh Java, JavaScript, PHP, Python. Tak satu pun dari mereka yang memiliki penunjuk itu sendiri.

Jadi kenapa? Apakah mereka memiliki padanan dalam bahasa mereka yang berfungsi seperti penunjuk, atau apakah fungsi penunjuk tidak lagi penting?

Saya kira-kira punya gambaran tetapi saya ingin mendengar dari programmer yang lebih berpengalaman mengenai hal ini.


person Boyang    schedule 15.08.2013    source sumber
comment
Ini mungkin sedikit membantu: Apa perbedaan referensi Java dengan pointer C?   -  person Tim Cooper    schedule 15.08.2013
comment
Lihat juga Mengapa Java tidak memiliki pointer?   -  person Shafik Yaghmour    schedule 15.08.2013


Jawaban (3)


Jadi kenapa?

Secara umum, pointer dianggap terlalu berbahaya, sehingga bahasa modern berusaha menghindari penggunaan langsungnya.

Apakah mereka memiliki padanan dalam bahasa mereka yang berfungsi seperti penunjuk, atau apakah fungsi penunjuk tidak lagi penting?

Fungsionalitasnya SANGAT penting. Namun agar tidak terlalu berbahaya, penunjuk telah diabstraksi menjadi tipe yang tidak terlalu mematikan, seperti referensi.

Pada dasarnya, ini bermuara pada pengetikan yang lebih kuat, dan kurangnya aritmatika penunjuk.

person Jiminion    schedule 15.08.2013
comment
Jadi referensi dalam bahasa-bahasa itu sebenarnya adalah pointer, hanya saja tanpa aritmatika? - person Boyang; 15.08.2013
comment
@CharlesW. Ya, jika Anda menggali cukup dalam, itu hanyalah petunjuk. (Pikirkan tentang terbatasnya cara komputer dapat mengakses data melalui operasi dasar.) Namun semuanya sangat diabstraksi dan berlapis sedemikian rupa sehingga Anda tidak dapat melakukan hal-hal buruk (dan menyenangkan!) yang dapat Anda lakukan dengan pointer C. C++ masih memiliki petunjuk, tapi itu sebagian besar karena ia harus tetap kompatibel dengan C. - person Jiminion; 15.08.2013

Kebanyakan bahasa berorientasi objek mengimplementasikan objek sebagai penunjuk C tetapi objek tersebut abstrak dan Anda tidak dapat mengubah nilainya. Jadi ketika Anda menggunakan this/self itu memang sebuah pointer di sebagian besar kasus (beberapa bahasa bisa memiliki tabel objek untuk reklamasi sampah yang lebih cepat dan optimasi lainnya).

Misalnya di Java ketika Anda melakukan sesuatu seperti:

Object t = new A();
t = new B();

Anda menukar penunjuk di belakang layar. Beberapa bahasa telah memperkenalkan kembali gagasan penunjuk seperti Go tetapi Anda tidak dapat melakukan aritmatika dengannya.

Jadi bisa dibilang: tidak ada penunjuk yang hilang dari bahasa, mereka hanya diterapkan dengan cara yang lebih baik. Cara C mendesain pointer tidak bagus sama sekali tetapi sesuai dengan tujuannya. Ini tidak baik karena berbagai alasan, salah satunya adalah: merusak program Anda. Saya tidak bermaksud menghindarinya, tentu saja itu krusial bagi C.

person mathk    schedule 15.08.2013

Di Jawa:

  • Alih-alih memiliki pointer ke struct yang Anda alokasikan dengan malloc, Anda memiliki referensi ke instance kelas yang Anda buat dengan "baru". (Di Java, Anda tidak bisa mengalokasikan memori untuk objek di heap secara langsung seperti di C/C++)
  • Primitif tidak memiliki pointer, TETAPI ada perpustakaan yang dibangun di perpustakaan utama untuk membungkus int,double, dll. dalam objek (Integer, Double).
person James Kingsbery    schedule 15.08.2013