Apakah ada konvensi untuk penamaan enumerasi di Jawa?
Preferensi saya adalah enum adalah tipe. Jadi, misalnya, Anda memiliki enum
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Saya menentang menyebutnya:
FruitEnum
NetworkConnectionTypeEnum
Saya mengerti mudah untuk memilih file mana yang enum, tetapi Anda juga harus:
NetworkConnectionClass
FruitClass
Juga, apakah ada dokumen bagus yang menggambarkan hal yang sama untuk konstanta, di mana harus mendeklarasikannya, dll?
java
standards
coding-style
Walter White
sumber
sumber
Jawaban:
Enum adalah kelas dan harus mengikuti konvensi untuk kelas. Contoh enum adalah konstanta dan harus mengikuti konvensi untuk konstanta. Begitu
Tidak ada alasan untuk menulis FruitEnum lebih dari FruitClass. Anda hanya membuang empat (atau lima) karakter yang tidak menambahkan informasi.
Java sendiri merekomendasikan pendekatan ini dan digunakan dalam contoh mereka .
sumber
Ini mungkin tidak akan membuat saya banyak teman baru, tetapi harus ditambahkan bahwa orang-orang C # memiliki pedoman yang berbeda: Contoh enum adalah "Pascal case" (campuran huruf besar / kecil). Lihat diskusi stackoverflow dan Pedoman Penamaan Jenis Pencacahan MSDN .
Saat kami bertukar data dengan sistem C #, saya tergoda untuk menyalin enum mereka dengan tepat, mengabaikan konvensi Java "constants have namesname". Memikirkan tentang itu, saya tidak melihat banyak nilai yang dibatasi pada huruf besar untuk contoh enum. Untuk beberapa tujuan .name () adalah jalan pintas yang berguna untuk mendapatkan representasi yang dapat dibaca dari konstanta enum dan nama case campuran akan terlihat lebih bagus.
Jadi, ya, saya berani mempertanyakan nilai konvensi penamaan Java enum. Fakta bahwa "setengah dari dunia pemrograman" memang menggunakan gaya yang berbeda membuat saya berpikir itu sah untuk meragukan agama kita sendiri.
sumber
Seperti yang telah dinyatakan, instance enum harus ditulis dalam huruf besar sesuai dengan dokumen di situs web Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).
Namun, ketika melihat tutorial JavaEE7 di situs web Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ), saya menemukan tutorial "Duke's bookstore" dan di kelas (
tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java
), Saya menemukan definisi enum berikut:Menurut konvensi, seharusnya terlihat seperti:
Jadi sepertinya bahkan orang-orang di Oracle terkadang berdagang dengan nyaman.
sumber
Dalam basis kode kami; kami biasanya mendeklarasikan enum di kelas tempat mereka berasal.
Jadi untuk contoh Buah Anda, Kami akan memiliki kelas Buah, dan di dalamnya ada Enum yang disebut Buah.
Merujuknya dalam kode terlihat seperti ini
Fruit.Fruits.Apple, Fruit.Fruits.Pear
:, dll.Konstanta mengikuti garis yang sama, di mana mereka didefinisikan dalam kelas yang relevan (jadi sesuatu seperti
Fruit.ORANGE_BUSHEL_SIZE
); atau jika mereka menerapkan seluruh sistem (yaitu "nilai nol" yang setara untuk int) dalam kelas bernama "ConstantManager" (atau setara; sepertiConstantManager.NULL_INT
). (catatan; semua konstanta kami dalam huruf besar)Seperti biasa, standar pengkodean Anda mungkin berbeda dari standar saya; jadi YMMV.
sumber
Lists
danMaps
. Menurut saya ini adalah konvensi yang bagus dan saya sepenuhnya mendukung penggunaannya yang lebih luas.Fruit.Fruits.Apple
terlalu bertele-tele bagi saya, benar-benar melanggar prinsip KERING :-) Saya lebih suka misalnyaFruit.Type.APPLE
.Mereka masih tipe, jadi saya selalu menggunakan konvensi penamaan yang sama saya gunakan untuk kelas.
Saya pasti akan mengerutkan kening pada menempatkan "Kelas" atau "Enum" dalam nama. Jika Anda memiliki a
FruitClass
dan aFruitEnum
maka ada sesuatu yang salah dan Anda perlu lebih banyak nama deskriptif. Saya mencoba untuk berpikir tentang jenis kode yang akan membutuhkan keduanya, dan sepertinya harus adaFruit
kelas dasar dengan subtipe alih-alih enum. (Itu hanya spekulasi saya sendiri, Anda mungkin memiliki situasi yang berbeda dari yang saya bayangkan.)Referensi terbaik yang dapat saya temukan untuk penamaan konstanta berasal dari tutorial Variables :
sumber
Jika saya dapat menambahkan $ 0,02, saya lebih suka menggunakan PascalCase sebagai nilai enum dalam C.
Di C, mereka pada dasarnya global, dan PEER_CONNECTED menjadi sangat melelahkan dibandingkan dengan PeerConnected.
Napas udara segar.
Secara harfiah, itu membuat saya bernapas lebih mudah.
Di Jawa, dimungkinkan untuk menggunakan nama enum mentah selama Anda statis mengimpornya dari kelas lain.
Sekarang, Anda dapat menggunakan nama yang tidak memenuhi syarat, yang sudah Anda kualifikasi dengan cara yang berbeda.
Saat ini saya (berpikir) tentang porting beberapa kode C ke Jawa dan saat ini 'sobek' antara memilih konvensi Java (yang lebih verbose, lebih panjang, dan lebih jelek) dan gaya C saya.
PeerConnected akan menjadi PeerState.CONNECTED kecuali dalam pernyataan switch, di mana ia TERHUBUNG.
Sekarang ada banyak yang bisa dikatakan untuk konvensi terakhir dan itu memang terlihat bagus tetapi "frase idiomatik" tertentu seperti
if (s == PeerAvailable)
menjadi sepertiif (s == PeerState.AVAILABLE)
dan nostalgia, ini adalah kehilangan makna bagi saya.Saya pikir saya masih lebih suka gaya Java karena kejelasan tapi saya kesulitan melihat kode berteriak.
Sekarang saya menyadari PascalCase sudah banyak digunakan di Jawa tetapi sangat membingungkan itu tidak akan benar-benar, hanya sedikit keluar dari tempatnya.
sumber
adalah (kurang-lebih) seperti mengatakan
jadi saya kira semua topi benar-benar lebih benar, tetapi saya masih menggunakan konvensi nama kelas karena saya benci semua topi di mana pun
sumber