Konvensi Penamaan Java dengan Akronim [ditutup]

218

Apa nama yang benar untuk kelas Java berikut: DVDPlayeratau DvdPlayer?

DD.
sumber
93
Saya benci akronim. DigitalVersatileDiscPlayeradalah jalan ke depan.
Tom Hawtin - tackline
7
+1 ke Tom untuk lelucon. Saya menemukan pertanyaan ini bermanfaat jika "benar" ditafsirkan kembali sebagai "standar" atau "paling khas". Jawaban yang diterima sangat bagus!
Jon Coombs
6
Bagi saya masuk akal untuk berpikir akronim seperti itu sebagai satu kata dan karena itu saya mengikuti konvensi dan penggunaannya DvdPlayer.
Daniel
7
Panduan gaya memiliki yang berikut untuk dikatakan tentang itu: "Format singkatan sebagai kata jika itu adalah bagian dari nama kelas yang lebih panjang." , begitu DvdPlayerjuga cara untuk pergi. (Dan, untuk Tom, "Gunakan seluruh kata dan hindari menggunakan singkatan kecuali singkatan itu lebih banyak digunakan daripada bentuk panjang." , Dan saya pikir "DVD" lebih banyak digunakan daripada "Digital Versatile Disc" :-)
aioobe
Anda tentu berarti "Diskus", bukan? :)
Ville Oikarinen

Jawaban:

237

Karena sepertinya jawabannya adalah bahwa tidak ada standar tunggal untuk ini di Jawa, saya ingin mencatat bahwa .NET Framework Design Guidelines menentukan hal ini.

Sekarang sebelum membanting saya karena berada di luar topik, harap diingat bahwa pedoman penamaan kelas untuk Java dan .NET Framework sangat mirip, yang menjadikan pedoman .NET bermanfaat sebagai referensi persuasif.

Aturan umum

Kedua pedoman merekomendasikan hanya menggunakan akronim ketika akronim dikenal luas dan dipahami dengan baik. DVD atau XML adalah contoh yang sangat baik dari ini, karena sementara Anda akan mengenalinya segera, akan butuh sedikit lebih lama untuk mengenali versi yang diperluas.

Singkatan

Pedoman .NET Framework merekomendasikan untuk tidak menggunakan singkatan (sebagai lawan dari akronim), kecuali bahwa dua singkatan umum 'ID' dan 'OK' dapat digunakan dalam pengidentifikasi. Saat menggunakan singkatan, case campuran Idselalu digunakan kecuali untuk kata pertama pengidentifikasi camelCase (sebagai lawan dari pengenal PascalCase).

Di Jawa konvensi ini hanya diikuti beberapa waktu. Lihatlah bagaimana mencampur ejaan getIDdan getIdberada di JCL. (Gulir sebagian ke bawah halaman itu). Dalam versi Java 8 , getIddigunakan lebih dan lebih, yang mengisyaratkan konvensi PascalCase lebih disukai saat ini. Sebaiknya hindari singkatan sepenuhnya jika memungkinkan.

Akronim Pendek

Pedoman .NET Framework mengatakan bahwa dua akronim huruf seperti 'IO', harus memiliki huruf yang sama untuk kedua huruf. Jadi untuk pengidentifikasi PascalCase (seperti nama kelas) Anda akan mendapatkan DBRate, sedangkan untuk pengidentifikasi camelCase (seperti variabel lokal) Anda mungkin harusioChannel .

Ini jelas merupakan konvensi yang berlaku di Jawa juga.

Singkatan panjang

Panduan .NET Framework merekomendasikan agar singkatan tiga huruf atau lebih panjang menggunakan case campuran untuk PascalCase dan pengidentifikasi camelCase, kecuali untuk kata pertama pengidentifikasi camelCase. Dengan demikian untuk nama kelas yang mungkin Anda miliki XmlDocument, sementara variabel lokal mungkin dinamai httpRequest.

Konvensi ini tidak selalu diikuti di Jawa. Akronim empat karakter tampaknya biasanya menggunakan case campuran, tetapi bahkan JCL tidak konsisten tentang akronim tiga huruf. Sebagian besar dari mereka tampaknya huruf besar, seperti 'URL', 'XML', 'SQL', dan 'DOM', tetapi ada beberapa pengecualian seperti 'Jar'.

Kesimpulan

Untuk Jawa:

Untuk akronim 4+ huruf, gunakan case campuran. Pustaka standar melakukan ini, dan itu masuk akal.

Untuk akronim 3 huruf, Anda bisa menggunakan semua huruf besar seperti JCL, atau Anda bisa menggunakan case campuran seperti halnya .NET Framework. Bagaimanapun, konsistenlah.

Untuk akronim 2 huruf, gunakan semua huruf besar.

Untuk singkatan 2 huruf, Java tidak benar-benar memiliki standar, tetapi saya sarankan menggunakan case campuran, kecuali konsistensi dengan nama lain akan membuat semua huruf besar terlihat lebih baik.

Kevin Cathcart
sumber
11
Nah, upaya yang bagus!
Eliran Malka
1
Saya suka ini, kecuali bahwa tidak konsisten untuk memiliki CAPS untuk akronim 3 dan 2 huruf. (Mungkin saya terlalu purist, tetapi lihat jawaban yang diterima untuk alasan praktis. Plus, ada faktor kebingungannya.)
Jon Coombs
1
@JCoombs: Ya, ketidakkonsistenan untuk 2 huruf adalah sesuatu IpAddressyang terlihat mengerikan bagi banyak orang. Secara pribadi ketika saya perlu menulis kode Java, saya menggunakan case campuran untuk akronim 3 huruf, hanya menyisakan dua huruf sebagai case khusus.
Kevin Cathcart
5
Bagaimana jika nama kelas Anda memiliki beberapa akronim dua huruf yang berdekatan? Terlepas dari apa yang Anda lakukan, itu akan terlihat 'salah' - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin
3
Jawaban yang sangat bagus. Tetapi secara pribadi saya tidak suka ide penamaan .NET tentang penamaan yang berbeda tergantung pada panjang akronim dan apakah itu singkatan. Siapa yang benar-benar peduli dan memeriksa panjang akronim? Atau apakah itu singkatan? Saya lebih suka aturan selimut untuk penamaan. Masalahnya muncul ketika menggunakan perpustakaan pihak ke-3 dengan konvensi yang berbeda dari aturan apa pun yang Anda pilih.
Amani Kilumanga
98

Tidak ada jawaban "benar". Hanya seperangkat praktik dan konvensi yang lebih baik bermain dengan alat Anda yang lain.

Karena itu saya lebih suka DvdPlayer. Ini lebih membantu karena di Eclipse Anda dapat melakukan Ctrl+ Shift+ Tdan memilih kelas dengan huruf pertama dari setiap kata.

teks alternatif

flybywire
sumber
19
oooo itu tip gerhana yang berguna. Terima kasih!
Peter Perháč
1
(+1) tip yang bagus. yang menjawab pertanyaan untuk saya :-)
Asaf
2
Hanya "SIO" sudah cukup untuk menemukan kelas itu.
finnw
7
Ini juga berfungsi di tempat lain di Eclipse - lengkap otomatis misalnya. Punya metode / variabel bernama 'myDvdCoverImage'? - cukup ketik mDCI Ctrl + Space
teabot
3
ada juga beberapa pintasan yang telah ditetapkan, seperti sysout Ctrl + Space, memberi Anda System.out.println. Hal yang sama berlaku untuk (coba) dan (untuk)
medopal
50

Saya telah melihat keduanya digunakan di alam liar, dan Sun tampaknya pergi untuk DVDPlayergaya. Saya lebih suka DvdPlayer, karena dengan cara itu jelas di mana batas kata bahkan jika ada beberapa akronim berturut-turut, seperti dalam HTTPURLConnection.

JaakkoK
sumber
3
Mengetik dengan cara ini juga lebih cepat.
Ates Goral
6
Saya pikir "DVDPlayer" membuat batas kata lebih jelas. "Dvd" bukan kata, sedangkan "DVD" adalah akronim untuk kata "Digital Versatile Disc". Jadi batas kata yang sebenarnya dalam "DVD Player" berada di "D", "V", "D", dan "P".
Greg Brown
18
@GregBrown: DVD adalah disk berlubang, tidak ada orang kecuali Anda yang tahu nama lengkapnya, tidak ada yang peduli. Dan jauh lebih praktis untuk menggunakan DvdPlayer.
Igor Rodriguez
4
@GregBrown: Sebenarnya itu lebih praktis setidaknya di Eclipse, di mana pengenalan unta-kasus adalah sakit dengan akronim: yaitu dengan DvdPlayer Anda dapat mengetik "DP" dan tekan Ctrl + 1 untuk mendapatkan pilihan untuk memilih DvdPlayer, tetapi jika Anda memiliki DVDPlayer, Anda harus mengetikkan "DVDP". Dan bahkan lebih menjengkelkan jika lebih lama. Saya tidak ingin memiliki UNESCOConnector dalam kode saya. Pokoknya itu masalah pilihan.
Igor Rodriguez
21
Contoh lain yang baik adalah HTTPSID - maksud saya HTTP SID atau HTTPS ID ... Oleh karena itu harus ditulis masing-masing HttpSid atau HttpsId untuk lebih menjelaskan artinya.
Oz Edri
37

Saya suka mendefinisikan masing-masing instance kelas dengan cara berikut:

Catalogue catalogue;
Person person;

Karena itu, jika saya menggunakan DVDPlayer, apa yang akan saya sebut contoh itu? dVDPlayer? Oleh karena itu saya akan memilih DvdPlayernama kelas, sehingga Anda dapat memberi nama contoh seperti dvdPlayer.

Peter Perháč
sumber
16
Ada apa dengan ini DVDPlayer dvdPlayer;?
azz
9
@DerFlatulator Apa yang tidak beres dengan itu? Tidak peduli bagaimana Anda datang dvdPlayer, ketika Anda kembali, Anda akan mendapatkannya DvdPlayer.
maaartinus
5
@DerFlatulator: ini masalah otomatisasi ketika mengkonversi dari UpperCamelCase ke lowerCamelCase: Saya punya masalah ketika mengotomatisasi pemetaan Hibernate ke snake_case: DvdPlayer -> dvd_playertetapi DVDPlayer -> d_v_d_player. Tidak ada cara untuk mengotomatisasi DVDPlayer ke dvd_player.
pdem
3
@DerFlatulator: oke, terima kasih atas jawabannya, ini berhasil dalam kasus ini. Tapi saya masih yakin dengan notasi "DvdPlayer": bagaimana dengan DVDRPGPlayer ?, harus dikonversi ke dvdRpgPlayer, bukan dvdrpgPlayer.
pdem
2
Juga pertimbangkan getter dan setter Anda: getDvdPlayer()berfungsi lebih baik daripada getDVDPlayer(), misalnya, ketika digunakan dengan JSP EL (misalnya, foo.dvdPlayer). Dan jika Anda memberi nama getter Anda dengan huruf kecil dalam akronim, yang terbaik adalah menjaga nama kelas Anda sama untuk konsistensi dan prediktabilitas.
daiscog
33

Beberapa contoh dari kelas JavaSE, apache commons dan spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Jadi - tidak masalah.

Bozho
sumber
3
Sepakat. Cukup konsisten dalam basis kode Anda.
JARC
2
Saya tidak akan mengatakan itu tidak masalah, meskipun yang ini bukan masalah besar. Beberapa penggunaan menemukan standar yang umumnya disukai sangat membantu, bahkan jika tidak semua orang konsisten untuk mengikutinya.
Jon Coombs
harus saya lebih memilih SRSlebih SoftwareRequirementSpecification?
Shantaram Tupe
24

Java yang efektif tampaknya lebih suka DvdPlayer.

Brian Harris
sumber
10

Seperti yang telah ditunjukkan orang lain, ini adalah gaya yang berbeda di seluruh proyek. Proyek Google seperti Guava dan GWT lebih suka DvdPlayergaya.

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case

Steven Benitez
sumber
Tautan konvensi Google yang lebih umum untuk DvdPlayergaya: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel
1
Tautan dalam jawaban telah pindah ke gwtproject.org/makinggwtbetter.html#codestyle Tautan @StanKurdziel menyebutkan telah pindah ke google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers
8

Dari sun java docs :

Nama kelas harus berupa kata benda, dalam kasus campuran dengan huruf pertama dari setiap kata internal yang ditulis dengan huruf kapital. Usahakan agar nama kelas Anda tetap sederhana dan deskriptif. Gunakan seluruh kata-hindari akronim dan singkatan (kecuali singkatan jauh lebih banyak digunakan daripada bentuk panjang, seperti URL atau HTML).

codaddict
sumber
14
Itu tidak benar-benar mengatakan apa-apa tentang apakah itu harus atas atau unta.
DD.
@DD. Menurut saya, "jauh lebih banyak digunakan" poin untuk menggunakan huruf kapital semua untuk akronim yang relevan (HTTP, GET, dll) daripada untuk beberapa kata spesifik bisnis acak seperti DVD, MRI, MAGA, dll.
goelakash
3

DVDPlayer adalah standar, tetapi DvdPlayer tidak jarang.

Anda lebih sering daripada tidak melihat getId. Itu mungkin karena berpikir ID adalah kependekan dari "Identity". Ini sebenarnya adalah inisial Dokumen Identitas.

HttpURLConnectionsering diberikan sebagai contoh konvensi campuran. Namun, "http" digunakan sebagai nama protokol dalam URL harus huruf kecil (meskipun huruf besar sering diterima).

Tom Hawtin - tackline
sumber
2
Saya tidak berpikir ini benar-benar standar, tetapi mungkin yang paling umum.
b.roth
Ada dalam Sun Coding Standard, IIRC. Meski tidak di JLS.
Tom Hawtin - tackline
7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire
2
Saya cukup yakin kebanyakan orang menggunakan ID sebagai singkatan dari Identifier ... yaitu dalam database ID tabel merujuk ke pengidentifikasi tabel ke dokumen identitas.
DD.
9
DVDPlayer jelas bukan standar; bahkan JDK sangat tidak konsisten dalam pendekatan mereka terhadap hal ini.
Kevin Bourrillion
0

Tidak ada "benar", hanya preferensi di sini.

Sun konsisten dalam cara mereka memberi nama kelas yang berisi "URL" dan "HTML", tapi saya melihat HTTP menggunakan semua huruf besar dan huruf unta di javadocs.

Secara pribadi, saya lebih suka DvdPlayer.

Duffymo
sumber
Saya percaya nama protokol HTTP dalam URL harus ditulis dalam huruf kecil (meskipun mungkin diterima dalam huruf besar oleh browser).
Tom Hawtin - tackline