Apa gunanya membuat perbedaan sintaksis antara tipe standar dan yang ditentukan pengguna?


13

Meskipun di sini saya akan merujuk secara khusus pada konvensi penamaan C ++ dan Bjarne Stroustrup , pada prinsipnya, saya telah melihat bahwa orang menggunakan aturan yang agak mirip untuk bahasa lain di sana-sini.

Jadi, ide dasarnya adalah seseorang harus dapat membedakan tipe standar dari tipe yang ditentukan pengguna saat membaca kode. Misalnya, Bjarne Stroustrup menyarankan bahwa seseorang menggunakan

huruf kapital awal untuk jenis (misalnya, Kotak dan Grafik)

yang, dengan mempertimbangkan itu

Bahasa C ++ dan perpustakaan standar tidak menggunakan huruf kapital

memungkinkan mencapai tujuan yang disebutkan di atas.

Tetapi mengapa kita perlu melakukannya? Apa yang bisa menjadi tujuan membedakan jenis standar dan yang ditentukan pengguna?

Saya tidak dapat menemukan alasan Bjarne Stroustrup mengenai hal itu, dan selain itu, saya sendiri berpikir dengan cara yang berlawanan secara diametris. : Aku tahu, aku tahu, "Siapa aku untuk membantah Stroustrup?" Tetapi, dengarkan, banyak fitur bahasa C ++, mis. Operator yang berlebihan, melayani tujuan untuk memungkinkan tipe yang ditentukan pengguna tingkat dukungan sintaksis yang sama dengan tipe standar. Dan kemudian semua ini bingung oleh disiplin penamaan yang berbeda ...

PS Belum lagi bahwa satu kata saja tidak cukup untuk menyebutkan kelas dan kata yang dipisahkan dengan garis bawah yang dimulai dengan huruf kapital terlihat sangat asing.


6
Pada akhirnya Anda bisa menyebutnya bentuk Notasi Hongaria juga (yaitu menanamkan info tentang jenis / penggunaan dalam nama), yang biasanya disukai. Karena itu: pertanyaan yang bagus.
stijn

2
@stijn: Ya, tapi apakah Anda tahu mengapa itu disukai? Kembali pada hari itu, ketika semua orang menggunakan editor teks untuk menulis program mereka, itu berguna untuk mengetahui jenisnya dengan melihat pengenal. Tetapi hari ini, Anda bisa mengarahkan kursor ke pengenal dalam setiap IDE modern dan itu akan memberi tahu Anda jenisnya.
Robert Harvey

4
@RobertHarvey Kecuali bahwa notasi Hungaria juga dihindari di komunitas yang tidak memiliki IDE yang kuat, atau lebih tepatnya, kebanyakan menggunakan editor teks biasa.

1
@RobertHarvey Tidak, saya mengetahui keduanya ("apps Hungarian" dan "systems Hungarian"), dan dalam pengalaman saya, tidak ada yang umum dalam, misalnya, Python dan Rust.

3
@ RobertTarvey Apakah Anda mengatakan notasi Hongaria hanya pernah ada di C, C ++ dan VB? Apapun, maksud saya adalah mempertanyakan alasan Anda memberikannya karena itu tidak disukai (bahwa itu berlebihan hanya karena kami memiliki IDE yang memberi tahu Anda jenisnya) karena alasan itu tidak berlaku untuk bahasa yang tidak memiliki ID seperti itu dan, dengan alasan Anda, harus mendapat manfaat dari Hongaria. Bahwa Python diketik secara dinamis tidak ada bedanya, sebenarnya itu harus meningkatkan alasan karena biasanya programmer mengetahui jenis-jenis saat menulis kode, tetapi mereka tidak dapat disimpulkan secara otomatis.

Jawaban:


5

Sama sekali tidak ada tujuan atau manfaat dalam hal itu. Salah satu tujuan C ++ adalah untuk memperlakukan UDT dan primitif secara bergantian, dan meskipun mereka belum sepenuhnya berhasil, ini adalah salah satu area di mana Anda tidak perlu membedakan.

Ketika berbicara soal penamaan, Stroustrup gila, dan ini fakta yang terbukti secara ilmiah.


2
Saya akan melihat RAII Anda, dan memberi Anda SFINAE.
Robert Harvey

5
Saya bisa melihat bagaimana mungkin berguna untuk membedakan tipe standar dari UDT. Anda tidak boleh mengubah kode di perpustakaan standar kecuali Anda memiliki alasan yang sangat bagus, jadi melihat huruf kecil menunjukkan bahwa Anda tidak harus melihat kode tersebut karena, well, itu ada di perpustakaan standar.
Robert Harvey

4
@delnan: Ya. Itu tidak lebih dari seruan kepada otoritas di pihak "Banyak orang". Jika "Banyak orang" ingin ke sini dan mendiskusikan alasan mereka, mereka bebas untuk melakukannya, dan sampai saat itu, mereka tidak punya apa-apa untuk ditambahkan. FTR, saya menggunakan huruf besar untuk UDT juga ... tetapi juga untuk primitif setiap kali saya harus menggunakan alias.
DeadMG

2
@RobertHarvey: Itu mengasumsikan bahwa Anda tidak dapat mengenali tipe Standar saat dilihat. Atau dengan mengarahkan mouse ke mereka di lingkungan Anda dan melihat "std ::". Atau dengan menggunakan Go To Definition atau apa pun. Jadi pada dasarnya, itu tidak berlaku.
DeadMG

1
Saya selalu berpikir tujuannya adalah untuk membedakan dari tipe standar, sebelum munculnya namespace. Saat ini, itu hanya peninggalan pemikiran lama ("praktik terbaik" yang berhenti menjadi yang terbaik beberapa waktu lalu). FWIW, dalam proyek pribadi saya, saya menggunakan huruf kecil snake_caseuntuk kelas dan ruang nama saya dan belum memiliki masalah - atau kebingungan - yang disebabkan oleh ini.
utnapistim

3

Konvensi penamaan adalah tentang mendukung pemahaman manusia (yaitu programmer dan pemelihara) kode.

UDT dapat ditentukan sehingga deklarasi variabel, inisialisasi, ekspresi, dan pernyataan bekerja pada mereka secara berbeda dari kasus untuk tipe standar. Untuk menemukan masalah, berguna bagi pengelola untuk memiliki beberapa petunjuk bahwa beberapa bagian kode mungkin melakukan hal-hal yang funky (misalnya penerapan tipe integral yang ditentukan pengguna yang digunakan dalam beberapa fungsi mungkin memiliki kelemahan dalam cara penambahannya).

Ada banyak cara untuk memberikan isyarat tersebut (komentar, spesifikasi desain, dll). Keuntungan dari konvensi penamaan adalah mereka ada dalam kode, sedangkan komentar dapat dihilangkan, ketinggalan zaman, dll.


2

Salah satu alasan saya menggunakan kata kapital untuk tipe, adalah untuk membedakan variabel dari tipe. Ini memungkinkan untuk mendeklarasikan variabel dengan, selain huruf besar, nama yang sama:

Foo foo;
Graph graph;

Ini dapat berguna untuk kelas yang hanya menggunakan satu instance di setiap konteks, misalnya pengaturan konfigurasi.


IMHO ini tidak menjawab pertanyaan dalam pos. Mungkin menambahkan "dalam hal ini, penamaan jenis standar dengan huruf kecil hanya untuk kompatibilitas dengan cstdlib".
Vorac
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.