Mengapa programmer Java suka menyebut variabel "clazz"? [Tutup]


156

Saya telah melihat banyak kode memiliki deklarasi seperti Class clazz, dari mana asalnya? Apakah ini semacam konvensi? Saya pikir 'clazz' bahkan bukan kata bahasa Inggris, tidak ada artinya sama sekali, bagaimana mungkin begitu banyak pemrogram menyebut nama yang salah secara kebetulan?


36
jangan lupa klass!
Peter Recore

24
@ Peter: Poin bagus, itu klassic.
Presiden James K. Polk

13
Aleksey Shipilev telah mengusulkan penggunaan сlassejaan dengan Cyrillic сsebagai alternatif.
Stuart Marks

12
@StuartMarks Saya menolak proposisi itu. Sama-sama.
Goran Vasic

16
Di Inggris, kami biasanya menggunakan 'clarse'.
John Gowers

Jawaban:


173

clazztelah digunakan di Jawa sebagai pengganti kata "class" sejak JDK 1.0. "class" adalah apa yang Anda inginkan, tetapi menyingkat atau memasukkan sampah ("a", "the", "_", dll) mengurangi kejelasan. clazzhanya kata kelas. Penutur bahasa Inggris "Internasional" (mereka yang membaca Bahasa Inggris Inggris dan Amerika) digunakan untuk mentransposisi 's' dan 'z'.

Karena Java telah mengungkapkan sumber dan budaya yang sesuai sejak awal, kode Java dan tutorial yang bermanfaat mengambil konvensi yang sama. Itulah salah satu hal hebat tentang ekosistem Jawa, yang saya pikir telah menjadi bagian penting dari keberhasilannya.


82
Sulit untuk menyetujui bahwa "clazz" lebih jelas daripada "_class" atau "myClass". Jika saya melihat "_class" dalam kode, maksudnya akan lebih jelas daripada bukan kata yang mengirim saya ke Google (dan ke halaman ini).
uscjeremy

@uscjeremy: Secara pribadi, saya lebih suka menggunakan garis bawah daripada memiliki pengidentifikasi yang hanya berbeda dalam kasus. Jika saya mendesain bahasa, saya akan membuatnya menjadi hibrida dari aturan case-sensitive dan non-case-sensitive: setiap pengidentifikasi hanya dapat digunakan dalam casing asli, tetapi deklarasi pengidentifikasi apa pun akan menyembunyikan pengidentifikasi yang sudah ada sebelumnya yang hanya berbeda dalam casing. Setelah Foodidefinisikan pada ruang lingkup kelas dan foopada ruang lingkup variabel lokal harus sah, tetapi semua referensi ke variabel ruang lingkup dalam lingkup lokal harus memerlukan this.Foo. Aturan seperti itu akan ...
supercat

@uscjeremy: ... menurut saya menggabungkan keuntungan dari bahasa yang peka terhadap huruf besar dan kecil. Bahasa yang tidak sensitif huruf memiliki manfaat bahwa pembacaan fonetik dari nama pengenal "foo" tidak akan membingungkan tanpa harus mengatakan "huruf besar" atau "huruf kecil", tetapi tidak ada alasan nyata untuk memungkinkan pengenal dieja someThingdi beberapa tempat dan sOmEtHiNgpada orang lain.
supercat

1
@supercat Kategori Umum Tanda Baca Unicode adalah tujuan saya memancing. unicode.org/faq/punctuation_symbols.html / Saya tidak akan mendesain C #. Di Jawa, Anda lolos dengan metode yang disebut fnorddan bidang yang dipanggil fnordtanpa masalah, huruf besar , atau kata-kata yang tidak masuk akal. Saya pikir itu akan cukup sebagai contoh balasan.
Tom Hawtin - tackline

3
@uscjeremy Sulit untuk menyetujui bahwa "clazz" lebih jelas daripada "_class" atau "myClass" - Benar. Namun, menggunakan "_class" tidak akan menjadi pilihan, karena jelas bertentangan dengan konvensi penamaan Java .
MC Emperor

73

Karena mereka tidak dapat menggunakan kata yang ingin mereka gunakan class. Itu sudah dipesan.


2
Ya, saya tahu, tapi saya pikir mengeja variabel dengan benar akan lebih bermakna.
Sawyer

22
@Tony - bagaimana Anda bisa mengatakan "Anda tahu" dan menuntut agar nama variabel dieja dengan benar di komentar yang sama? Mereka saling eksklusif.
duffymo

3
@Tony, Anda tidak bisa memberi nama variabel "kelas", itu kata yang dilindungi undang-undang.
Steve Kuo

6
@duffymo: Lucu. Saya tahu kelas adalah kata yang dilindungi undang-undang, dan saya memang menuntut nama variabel dieja dengan benar, mengapa mereka saling eksklusif ?? Anda harus menyebutnya 'kelas'?
Sawyer

13
Saya menduga Tony ingin variabel diberi nama sesuatu yang lebih deskriptif daripada hanya "kelas". Misalnya, "x" dapat dikatakan dieja dengan benar, tetapi itu tidak berarti sebanyak "numberOfComments"
Peter Recore

17

Itu hanya karena 'kelas' adalah kata kunci yang dipesan, karenanya Class classtidak diperbolehkan. Karena itu Anda akan melihat Class clazzatau Class cls.


7
Saya tidak dapat memikirkan alasan untuk menyebutkan kelas Classkarena ada begitu banyak kelas dalam proyek tertentu yang menyebut kelas itu kelas THE sepertinya tidak ada gunanya. Saya juga tidak bisa memikirkan alasan untuk memanggil VARIABEL class...
Blindy

8
Anda tidak memberi nama Kelas kelas, itu java API.
Sawyer

3
@ Blindy: Bagaimana dengan java.lang.Class? Anda tidak punya banyak pilihan di sana.
Dan Dyer

14
@ Blindy: Sudah ada kelas yang disebut Kelas, yang mengacu pada, kelas objek. Alasan sempurna untuk memiliki variabel yang disebut 'kelas' adalah ketika Anda bekerja dengan kelas objek (yaitu: mencari tahu apa jenis objek)
Pendeta Gonzo

3
Saya akan mempertimbangkan informatif ClassInformation, ClassMetadataatau sesuatu yang serupa. Setiap kelas adalah kelas, tetapi Anda tidak menyebutkan semuanya Class, Anda menamainya berdasarkan fungsi utama mereka.
Blindy

7

Itu datang ke kompiler yang sebenarnya dan kemampuannya untuk membedakan apa arti token dalam konteksnya. Namun, dalam kasus khusus ini, ketidakmampuan kompiler untuk membedakan apa arti token classdalam konteks yang berbeda. Merupakan aturan yang keras dan cepat bahwa class, terlepas dari konteksnya, digunakan untuk menunjukkan deklarasi kelas, dan karenanya merupakan kata yang dilindungi undang - undang . Itu sesederhana dan serendah mungkin.

Jika Anda merasa harus, Anda bisa menulis kompiler Java Anda sendiri untuk memasukkan aturan kontekstual yang akan memungkinkan Anda untuk digunakan classsebagai nama variabel. Meskipun saya pikir akan jauh lebih baik menggunakan waktu Anda untuk hanya menggunakan clazzatau klass- mungkin akan baik untuk kesehatan Anda juga.


3
Sebuah kata tentang ketidakmampuan : Java dirancang sebagai bahasa yang dilindungi kata-kata . Bahasa yang tidak dilindungi undang-undang dapat berhasil mengkompilasi dan sintaks-menyoroti pernyataan seperti jika jika kemudian maka lain , meskipun (tidak) keterbacaan. Jadi kompiler sengaja tidak dapat
usr-local-ΕΨΗΕΛΩΝ

4

dari mana ini berasal?

Saya melihatnya pertama kali di puzzle Josh Bloch. Tapi saya cukup yakin itu digunakan lebih awal oleh pengembang lain. Josh Bloch membuatnya lebih terkenal.


4

Java tidak memiliki fitur yang memungkinkan Anda menggunakan kata kunci sebagai pengidentifikasi, tidak seperti C # dengan @awalannya (mis. @classAdalah pengidentifikasi yang valid.)


2
Itu pengidentifikasi yang berbeda. classdan $classkeduanya merupakan pengidentifikasi yang valid (tetapi berbeda) di JVM. Tidak ada pengidentifikasi yang dapat Anda tulis dalam file sumber Java yang diterjemahkan ke "class"dalam VM.
finnw

2

Itu hanya kata bahasa Inggris yang diganti (Equavalent) oleh Kata Kunci Kelas Kata Kunci, untuk membuat orang mengerti bahwa itu adalah Kelas. dan hampir meningkatkan keterbacaan Kode

Tidak ada Logika besar yang terlibat dalam hal ini


2

Deklarasi Class clazzpopuler di dunia Jawa, tetapi mungkin canggung bagi pendatang baru dan pemeriksa ejaan. Saya pernah mendengar beberapa orang mengatakan bahwa itu harus dihindari sesuai dengan prinsip paling tidak heran .

Karena dimungkinkan untuk mengatakan bahwa suatu Classobjek mewakili suatu tipe , saya pribadi lebih suka mendeklarasikan variabel seperti itu Class type.


0

Kami menggunakan clazz karena class adalah tipe header. Misalnya, Anda menggunakan kelas di sini:

public class HelloWorld {

dan di sini:

Object.class.getName();

Jadi sayangnya, kita harus menggunakan nama alternatif seperti clazz.


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.