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?

Penggergaji
sumber
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.

Tom Hawtin - tackline
sumber
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.

Presiden James K. Polk
sumber
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.

sfussenegger
sumber
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.

John
sumber
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.

Roma
sumber
4

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

menemukan
sumber
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

gmhk
sumber
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.

Michal Kordas
sumber
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.

Romejanic
sumber
-2

Sederhananya, classmemiliki kelas yang clazztidak.

pengguna1843640
sumber