แบบแผนการตั้งชื่อ Java ด้วยตัวย่อ [ปิด]


218

ชื่อที่ถูกต้องสำหรับคลาส Java ต่อไปนี้ คืออะไรDVDPlayerหรือDvdPlayer?


93
ฉันเกลียดคำย่อ DigitalVersatileDiscPlayerเป็นหนทางข้างหน้า
Tom Hawtin - tackline

7
+1 ถึง Tom สำหรับเรื่องตลก ฉันพบว่าคำถามนี้มีประโยชน์หาก "ถูกต้อง" ถูกตีความใหม่ว่า "มาตรฐาน" หรือ "โดยทั่วไป" คำตอบที่ยอมรับได้ดีมาก!
จอนคูมบ์ส

6
สำหรับฉันมันทำให้ความรู้สึกที่จะคิดว่าคำย่อเช่นคำเดียวและเป็นเช่นนี้ผมทำตามการประชุมDvdPlayerและการใช้งาน
Daniel

7
คู่มือสไตล์มีดังต่อไปนี้ที่จะพูดถึง: "จัดรูปแบบตัวย่อเป็นคำหากเป็นส่วนหนึ่งของชื่อคลาสที่ยาวขึ้น" จึงDvdPlayerเป็นวิธีที่จะไป (และสำหรับทอม"ใช้คำทั้งหมดและหลีกเลี่ยงการใช้ตัวย่อเว้นแต่ตัวย่อจะใช้กันอย่างแพร่หลายมากกว่าแบบยาว"และฉันคิดว่า "DVD" ใช้กันอย่างแพร่หลายมากกว่า "Digital Versatile Disc" :-)
aioobe

คุณหมายถึง "Discus" ใช่ไหม :)
Ville Oikarinen

คำตอบ:


237

เนื่องจากดูเหมือนว่าคำตอบคือไม่มีมาตรฐานเดียวสำหรับสิ่งนี้ใน Java ฉันต้องการทราบว่า. NET Framework Design Guidelines ระบุสิ่งนี้

ตอนนี้ก่อนที่ฉันจะปิดการโพสต์หัวข้อโปรดจำไว้ว่าแนวทางการตั้งชื่อคลาสสำหรับ Java และ. NET Framework นั้นค่อนข้างคล้ายกันซึ่งทำให้แนวทาง. NET มีประโยชน์ในการอ้างอิงโน้มน้าวใจ

กฎทั่วไป

แนวทางทั้งสองแนะนำให้ใช้คำย่อเมื่อตัวย่อเป็นที่รู้จักและเข้าใจกันอย่างกว้างขวางเท่านั้น ดีวีดีหรือ XML เป็นตัวอย่างที่ยอดเยี่ยมเช่นนี้ในขณะที่คุณจะรับรู้ได้ทันทีจะใช้เวลานานขึ้นในการรับรู้เวอร์ชันที่ขยาย

ตัวย่อ

. NET Framework Guidelines ไม่แนะนำให้ใช้ตัวย่อ (ตรงข้ามกับคำย่อ) ยกเว้นอาจใช้ 'ID' และ 'OK' ตัวย่อทั่วไปสองตัวในตัวระบุ เมื่อใช้ตัวย่อให้ใช้ตัวพิมพ์เล็กIdเสมอยกเว้นคำแรกของตัวระบุ camelCase (ตรงข้ามกับตัวระบุ PascalCase)

ในจาวาการประชุมนี้จะตามมาเพียงบางครั้ง ดูการสะกดคำที่ผสมกันgetIDและgetIdอยู่ใน JCL (เลื่อนลงไปครึ่งหนึ่งในหน้านั้น) ในJava 8 รุ่นแม้ว่าgetIdมีการใช้งานมากขึ้นเรื่อย ๆ ซึ่งเป็นข้อบ่งชี้ถึงความนิยมของการประชุม PascalCase ในปัจจุบัน เป็นการดีที่สุดที่จะหลีกเลี่ยงตัวย่อทั้งหมดเมื่อเป็นไปได้

คำย่อสั้น ๆ

หลักเกณฑ์ของ. NET Framework บอกว่าตัวย่อสองตัวอักษรเช่น 'IO' ควรมีตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ทั้งสองตัวเหมือนกัน ดังนั้นสำหรับตัวระบุ PascalCase (เช่นชื่อคลาส) คุณจะได้รับDBRateในขณะที่สำหรับตัวระบุ camelCase (เช่นตัวแปรท้องถิ่น) คุณอาจมีioChannelคุณอาจจะมี

นี่ดูเหมือนจะเป็นการประชุมที่แพร่หลายใน Java เช่นกัน

ตัวย่อยาว

หลักเกณฑ์. NET Framework แนะนำให้ใช้ตัวย่อสามตัวอักษรหรือมากกว่านั้นใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับ PascalCase และ camelCase identifier ยกเว้นคำแรกของ camelCase identifier ดังนั้นสำหรับชื่อชั้นที่คุณอาจมีในขณะที่ตัวแปรท้องถิ่นอาจจะมีการตั้งชื่อXmlDocumenthttpRequest

การประชุมนี้ไม่ได้ทำตามใน Java เสมอไป ตัวย่อสี่ตัวอักษรดูเหมือนจะใช้ตัวพิมพ์ใหญ่ผสมกัน แต่ JCL ก็ไม่สอดคล้องกับตัวย่อสามตัว ส่วนใหญ่ดูเหมือนจะเป็นตัวพิมพ์ใหญ่ทั้งหมดเช่น 'URL', 'XML', 'SQL' และ 'DOM' แต่มีข้อยกเว้นบางอย่างเช่น 'Jar'

ข้อสรุป

สำหรับ Java:

สำหรับอักษรย่อขนาด 4+ ให้ใช้ตัวพิมพ์เล็ก ห้องสมุดมาตรฐานทำสิ่งนี้และมันก็สมเหตุสมผลดี

สำหรับคำย่อตัวอักษร 3 ตัวคุณสามารถใช้ตัวพิมพ์ใหญ่ทั้งหมดเช่น JCL หรือคุณสามารถใช้ตัวพิมพ์ใหญ่แบบผสมได้เช่นเดียวกับ. NET Framework ไม่ว่าจะด้วยวิธีใดให้สอดคล้องกัน

สำหรับตัวย่อ 2 ตัวให้ใช้ตัวพิมพ์ใหญ่ทั้งหมด

สำหรับตัวย่อ 2 ตัว Java ไม่ได้มีมาตรฐาน แต่ฉันแนะนำให้ใช้ตัวอักษรผสมกันเว้นแต่ความสอดคล้องกับชื่ออื่นจะทำให้ตัวพิมพ์ใหญ่ดูดีขึ้น


11
ใส่ดีความพยายามที่ดี!
Eliran Malka

1
ฉันชอบสิ่งนี้ยกเว้นว่ามันไม่สอดคล้องกันที่จะมีตัวย่อ CAPS สำหรับตัวย่อ 3 และ 2 ตัวอักษร (บางทีฉันอาจเป็นคนเจ้าระเบียบมาก แต่ดูคำตอบที่ยอมรับได้สำหรับเหตุผลที่ใช้ได้นอกจากนี้ยังมีปัจจัยความสับสน)
Jon Coombs

1
@JCoombs: ความไม่ลงรอยกันของ 2 ตัวอักษรคืออะไรบางอย่างIpAddressที่ดูแย่สำหรับหลาย ๆ คน โดยส่วนตัวเมื่อฉันต้องการเขียนโค้ด Java ฉันใช้ตัวพิมพ์เล็กสำหรับตัวย่อ 3 ตัวโดยเหลือเฉพาะตัวอักษรสองตัวเป็นกรณีพิเศษ
Kevin Cathcart

5
เกิดอะไรขึ้นถ้าชื่อคลาสของคุณมีตัวย่อสองตัวที่อยู่ติดกันหลายตัว ไม่ว่าคุณจะทำอะไรมันจะดูเหมือน 'ผิด' - USGFCharset, UsGfCharset, US_GFCharset ...
เควิน

3
คำตอบที่ดีจริงๆ แต่โดยส่วนตัวแล้วฉันไม่ชอบแนวคิดของ. NET ของการตั้งชื่อที่แตกต่างกันขึ้นอยู่กับความยาวของตัวย่อและไม่ว่าจะเป็นตัวย่อหรือไม่ ใครสนใจและตรวจสอบความยาวของคำย่อ หรือถ้ามันเป็นตัวย่อ? ฉันชอบกฎแบบครอบคลุมสำหรับการตั้งชื่อ ปัญหาเกิดขึ้นเมื่อใช้ห้องสมุดบุคคลที่สามที่มีแบบแผนแตกต่างจากกฎที่คุณเลือกใช้
Amani Kilumanga

98

ไม่มีคำตอบ "ถูกต้อง" เพียงชุดของการปฏิบัติและการประชุมที่เล่นกับเครื่องมืออื่น ๆ ของคุณได้ดีขึ้น

DvdPlayerดังนั้นผมจึงต้องการ มันมีประโยชน์มากกว่าใน Eclipse ที่คุณสามารถทำได้Ctrl+ Shift+ Tและเลือกชั้นเรียนตามตัวอักษรตัวแรกของแต่ละคำ

ข้อความแสดงแทน


19
oooo นั่นเป็นเคล็ดลับที่มีประโยชน์ ขอบคุณ!
Peter Perháč

1
(+1) คำแนะนำที่ดี ว่าคำตอบคำถามสำหรับฉัน :-)
Asaf

2
เพียงแค่ "SIO" ก็เพียงพอที่จะหาชั้นเรียนนั้น
finnw

7
นอกจากนี้ยังสามารถใช้งานได้ที่อื่นใน Eclipse เช่นป้อนอัตโนมัติ มีวิธี / ตัวแปรชื่อ 'myDvdCoverImage' หรือไม่ - เพียงพิมพ์ mDCI Ctrl + Space
teabot

3
นอกจากนี้ยังมีทางลัดบางตัวที่ตั้งค่าไว้แล้วเช่น sysout Ctrl + Space ให้ System.out.println กันไปสำหรับ (ลอง) และ (สำหรับ)
medopal

50

ฉันเคยเห็นพวกเขาทั้งสองใช้ในป่าและดูเหมือนว่าดวงอาทิตย์จะเหมาะกับDVDPlayerสไตล์ ฉันชอบแต่เนื่องจากวิธีการที่มีความชัดเจนที่ขอบเขตของคำว่าแม้ว่าจะมีหลายคำย่อที่ติดต่อกันในขณะที่DvdPlayerHTTPURLConnection


3
นอกจากนี้ยังเร็วกว่าในการพิมพ์ด้วยวิธีนี้
Ates Goral

6
ฉันคิดว่า "DVDPlayer" ทำให้ขอบเขตของคำศัพท์ชัดเจนขึ้น "Dvd" ไม่ใช่คำในขณะที่ "DVD" เป็นคำย่อของคำว่า "Digital Versatile Disc" ดังนั้นขอบเขตคำที่แท้จริงใน "เครื่องเล่นดีวีดี" จึงอยู่ที่ "D", "V", "D" และ "P"
เกร็กบราวน์

19
@ GregBrown: ดีวีดีเป็นแผ่นที่มีรูไม่มีใครนอกจากคุณจะรู้ชื่อเต็มของมันและไม่สนใจมัน และการใช้ DvdPlayer นั้นมีประโยชน์มากกว่า
Igor Rodriguez

4
@GregBrown: อันที่จริงแล้วมันมีประโยชน์มากกว่าอย่างน้อยใน Eclipse โดยที่การจดจำตัวอักษรอูฐเป็นความเจ็บปวดด้วยตัวย่อ: เช่นกับ DvdPlayer คุณสามารถพิมพ์ "DP" และกด Ctrl + 1 เพื่อเลือกตัวเลือก DvdPlayer แต่ถ้า คุณมี DVDPlayer คุณจะต้องพิมพ์ "DVDP" และยิ่งน่ารำคาญกว่าเดิมถ้ามันนานขึ้น ฉันไม่ต้องการมีตัวเชื่อมต่อ UNESCOC ในรหัสของฉัน อย่างไรก็ตามมันเป็นเรื่องของการเลือก
Igor Rodriguez

22
อีกตัวอย่างที่ดีคือ HTTPSID - ฉันหมายถึง HTTP SID หรือ HTTPS ID ... ดังนั้นควรเขียน HttpSid หรือ HttpsId ตามลำดับเพื่ออธิบายความหมายได้ดีขึ้น
Oz Edri

37

ฉันชอบที่จะกำหนดอินสแตนซ์ของแต่ละคลาสในแบบต่อไปนี้:

Catalogue catalogue;
Person person;

ดังนั้นถ้าฉันใช้DVDPlayerฉันจะเรียกตัวอย่างของสิ่งนั้นได้อย่างไร dVDPlayer? ดังนั้นฉันจะเลือกDvdPlayerชื่อคลาสดังนั้นคุณสามารถตั้งชื่ออินสแตนซ์ที่ต้องการdvdPlayerได้


16
มีอะไรผิดปกติกับDVDPlayer dvdPlayer;?
azz

9
@Delulatorulator ไม่ผิดปกติกับมันคืออะไร? ไม่ว่าคุณจะมาถึงเมื่อคุณกลับไปคุณจะได้รับdvdPlayer DvdPlayer
maaartinus

5
@DerFlatulator: เป็นคำถามของอัตโนมัติเมื่อมีการแปลงจาก UpperCamelCase เพื่อ lowerCamelCase A: ผมมีปัญหาเมื่อทำแผนที่อัตโนมัติ Hibernate เพื่อ snake_case A: แต่DvdPlayer -> dvd_player DVDPlayer -> d_v_d_playerไม่มีวิธีในการทำให้เครื่องเล่นดีวีดีอัตโนมัติเป็น dvd_player
pdem

3
@Delulatorulator: โอเคขอบคุณสำหรับการตอบกลับมันทำงานได้ในกรณีนี้ แต่ฉันก็ยังเชื่อด้วยสัญกรณ์ "DvdPlayer": แล้ว DVDRPGPlayer ล่ะก็ควรแปลงเป็น dvdRpgPlayer ไม่ใช่ dvdrpgPlayer
pdem

2
พิจารณาตัวรับและตัวตั้งค่าของคุณด้วย: getDvdPlayer()ทำงานได้ดีกว่าgetDVDPlayer()เช่นเมื่อใช้กับ JSP EL (เช่นfoo.dvdPlayer) และถ้าคุณตั้งชื่อตัวให้กับตัวเล็กเป็นตัวย่อคุณควรตั้งชื่อคลาสให้เหมือนกันเพื่อความมั่นคงและการคาดการณ์
daiscog

33

ตัวอย่างบางส่วนจากคลาส JavaSE, apache คอมมอนส์และสปริง:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

ดังนั้น - มันไม่สำคัญเลย


3
ตกลง เพียงแค่สอดคล้องในฐานรหัสของคุณ
JARC

2
ฉันจะไม่พูดว่ามันไม่สำคัญแม้ว่าอันนี้จะไม่เป็นเรื่องใหญ่ การใช้งานบางอย่างพบว่ามาตรฐานที่ต้องการโดยทั่วไปมีประโยชน์มากแม้ว่าจะไม่ใช่คนอื่นก็ตามที่สอดคล้องกับการติดตามพวกเขา
จอนคูมบ์ส

ฉันควรจะชอบSRSมากกว่านี้SoftwareRequirementSpecificationไหม?
Shantaram Tupe


10

ตามที่คนอื่นได้ระบุไว้มันเป็นสไตล์ที่แตกต่างกันไปตามโครงการ โครงการของ Google เช่น Guava และ GWT ชอบDvdPlayerสไตล์

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


ลิงค์ทั่วไปของการประชุมของ Google สำหรับDvdPlayerสไตล์: google-styleguide.googlecode.com/svn/trunk/…
Stan Kurdziel

1
การเชื่อมโยงในคำตอบที่ได้ย้ายไปgwtproject.org/makinggwtbetter.html#codestyle ลิงค์ @StanKurdziel กล่าวได้ย้ายไปgoogle.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers

8

จากsun java docs :

ชื่อชั้นควรเป็นคำนามในกรณีผสมกับตัวอักษรตัวแรกของแต่ละคำภายในตัวพิมพ์ใหญ่ พยายามทำให้ชื่อคลาสของคุณเรียบง่ายและเป็นคำอธิบาย ใช้ทั้งคำย่อ - หลีกเลี่ยงคำย่อและตัวย่อ (ยกเว้นตัวย่อที่ใช้กันอย่างแพร่หลายมากกว่าแบบยาวเช่น URL หรือ HTML)


14
ไม่ได้พูดอะไรเกี่ยวกับว่ามันควรจะเป็นกรณีบนหรืออูฐ
DD

@DD ฉันคิดกับฉันว่า "ใช้กันอย่างแพร่หลายมากขึ้น" ในการใช้ตัวพิมพ์ใหญ่ทั้งหมดสำหรับคำย่อที่เกี่ยวข้อง (HTTP, GET และอื่น ๆ ) มากกว่าคำเฉพาะธุรกิจแบบสุ่มเช่น DVD, MRI, MAGA และอื่น ๆ
goelakash

3

DVDPlayerเป็นมาตรฐาน แต่DvdPlayerไม่ใช่เรื่องแปลก

getIdคุณมักจะมากกว่าไม่เห็น อาจเป็นเพราะการคิด ID นั้นย่อมาจาก "Identity" จริงๆแล้วมันเป็นตัวย่อของเอกสารประจำตัว

HttpURLConnectionมักได้รับเป็นตัวอย่างของการประชุมแบบผสม อย่างไรก็ตาม "http" ที่ใช้เป็นชื่อโปรโตคอลใน URL ควรเป็นตัวพิมพ์เล็ก (แม้ว่าจะเป็นตัวพิมพ์ใหญ่มักจะยอมรับ)


2
ฉันไม่คิดว่านี่เป็นมาตรฐานจริงๆ แต่อาจเป็นเรื่องธรรมดาที่สุด
b.roth

มันอยู่ในมาตรฐานการเข้ารหัส Sun Java, IIRC แม้ว่าจะไม่ได้อยู่ใน JLS
Tom Hawtin - tackline

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire

2
ฉันค่อนข้างมั่นใจว่าคนส่วนใหญ่ใช้ ID เป็นตัวย่อของ Identifier ... เช่นในฐานข้อมูล ID ตารางจะอ้างถึงตัวระบุตารางกับเอกสารประจำตัว
DD

9
DVDPlayer ไม่ได้มาตรฐานอย่างแน่นอน แม้แต่ JDK ก็ยังขัดแย้งกันในแนวทางนี้
Kevin Bourrillion

0

ไม่มี "ถูกต้อง" การตั้งค่าเฉพาะที่นี่

Sun มีความสอดคล้องในวิธีที่พวกเขาตั้งชื่อคลาสที่มี "URL" และ "HTML" แต่ฉันเห็น HTTP โดยใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กทั้งหมดใน javadocs

ส่วนตัวฉันชอบ DvdPlayer


ฉันเชื่อว่าชื่อโปรโตคอล HTTP ใน URL ควรเขียนด้วยตัวพิมพ์เล็ก
Tom Hawtin - tackline
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.