การประชุมสำหรับตัวคั่นคำในชื่อแพคเกจ Java คืออะไร?


370

ควรแยกหนึ่งคำในชื่อแพ็คเกจอย่างไร ข้อใดต่อไปนี้ถูกต้อง

  1. com.stackoverflow.my_package (ใต้)
  2. com.stackoverflow.my-package (ยัติภังค์)
  3. com.stackoverflow.MyPackage (CamelCase)

มาตรฐานทั่วไปคืออะไร


15
อีกตัวอย่างที่ยังไม่ได้กล่าวถึงใช้ระยะเวลา:com.stackoverflow.my.package
Brad Cupit

11
(2) ไม่ใช่ Java ที่ถูกกฎหมาย ไม่ชัดเจนว่าทำไมคุณถึงถามเกี่ยวกับเรื่องนี้
มาร์ควิสแห่ง Lorne

โปรดทราบว่าทั้งหมดนี้เป็นเพียงเพื่อให้แน่ใจว่ามีเอกลักษณ์ สิ่งเดียวที่บังคับใช้จริงคือการไม่ใช้พื้นที่ของ java. *
Thorbjørn Ravn Andersen

คำตอบ:


248

นี่คือสิ่งที่เอกสารการประชุมตั้งชื่ออย่างเป็นทางการกำหนด:

แพคเกจ

คำนำหน้าของชื่อแพคเกจที่ไม่ซ้ำกันมักจะเขียนในตัวอักษร ASCII-พิมพ์เล็กทั้งหมดและควรจะเป็นหนึ่งในชื่อโดเมนระดับบนสุดในปัจจุบันcom, edu, gov, mil, net, orgหรือหนึ่งในอังกฤษรหัสตัวอักษรสองตัวประเทศระบุตามที่ระบุไว้ใน ISO มาตรฐาน 3166, 1981

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

ตัวอย่าง

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

อ้างอิง


โปรดทราบว่าโดยเฉพาะอย่างยิ่งสิ่งใดก็ตามที่ต่อท้ายคำนำหน้าโดเมนระดับบนนั้นไม่ได้ระบุไว้ในเอกสารข้างต้น JLS ยังเห็นด้วยกับสิ่งนี้โดยให้ตัวอย่างต่อไปนี้:

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

ข้อความที่ตัดตอนมาต่อไปนี้เกี่ยวข้องกับ:

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

  • หากชื่อโดเมนมียัติภังค์หรืออักขระพิเศษอื่น ๆ ที่ไม่ได้รับอนุญาตในตัวระบุให้แปลงเป็นเครื่องหมายขีดล่าง
  • หากองค์ประกอบชื่อแพ็กเกจที่ได้นั้นเป็นคำหลักให้ผนวกขีดล่างเข้าด้วยกัน
  • หากส่วนประกอบชื่อแพ็กเกจที่เป็นผลลัพธ์ใด ๆ เริ่มต้นด้วยตัวเลขหรืออักขระอื่นใดที่ไม่ได้รับอนุญาตให้ใช้เป็นอักขระเริ่มต้นของตัวระบุให้มีขีดล่างนำหน้าส่วนประกอบ

อ้างอิง


52
บทที่ 7.7 ยิ่งแนะนำให้ใช้เครื่องหมายขีดล่างในชื่อแพ็คเกจ!
Andreas Dolk

1
อัปเดตข้อมูลอ้างอิง: docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 docs.oracle.com/javase/specs/jls/se7/html/jls-7.html# jls-7.1 (ไม่มีอีก 6.8.1 และ 7.7)
ชนะ

6
ที่นี่: oracle.com/technetwork/java/codeconventions-135099.htmlมีคำว่า all-lower แต่ที่นี่docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1พูดว่า ว่าองค์ประกอบแรกควรเป็นตัวพิมพ์เล็กและพวกเขาก็ยกตัวอย่างการแยกคำตัวพิมพ์ใหญ่ นอกจากนี้ที่นี่: docs.oracle.com/javase/tutorial/java/package/namingpkgs.htmlมันบอกว่าเป็นตัวพิมพ์เล็กทั้งหมด ดังนั้นดูเหมือนว่าตัวพิมพ์ใหญ่ในชื่อแพคเกจจะหมดกำลังใจ
dhblah

27
บทที่ 7.7 ไม่แนะนำให้ใช้เครื่องหมายขีดล่างมันแนะนำให้แทนที่สัญลักษณ์พิเศษ / ไม่ถูกต้องด้วยเครื่องหมายขีดล่างซึ่งค่อนข้างไกลจากการแนะนำสำหรับการใช้งานทั่วไปเท่านั้น
eduard.dudar

270

ทั้งสามไม่ใช่การประชุม

com.stackoverflow.mypackageใช้

ชื่อแพคเกจไม่ปฏิบัติตามท่ออูฐหรือขีดหรือขีดแพคเกจประชุมการตั้งชื่อ

นอกจากนี้Google Java Style Guideระบุcom.stackoverflow.mypackageแบบแผน(เช่น) ที่เหมือนกันทุกประการ:

5.2.1 ชื่อแพ็คเกจ

ชื่อแพคเกจเป็นตัวพิมพ์เล็กทั้งหมดพร้อมคำต่อกันเพียงแค่การต่อกัน (ไม่มีขีดล่าง) ตัวอย่างเช่นcom.example.deepspace, ไม่ได้ หรือcom.example.deepSpacecom.example.deep_space

- Google แนะนำสไตล์ Java: 5.2 กฎโดยแบ่งตามชนิดระบุ 5.2.1 ชื่อแพ็กเกจ


9
ฉันเห็นด้วยบางส่วน - พวกเขาไม่ได้ 'ผิด' ตามหลักการตั้งชื่อจาวา แต่พวกเขาไม่ควรใช้ในความคิดของฉัน ( java.sun.com/docs/codeconv/html/CodeConventions.doc8.html )
Andreas Dolk

@Andreas_D ลิงก์ที่คุณให้ไว้ระบุว่า "คำนำหน้าชื่อแพคเกจที่ไม่ซ้ำกันมักจะเขียนด้วยตัวอักษร ASCII ที่เป็นตัวพิมพ์เล็ก"
Jose Gómez

1
@ JoseGómez " คำนำหน้า " ดังนั้น imho สิ่งนี้ไม่ได้แยกคำอื่น ๆ ที่ประกอบด้วยชื่อแพ็คเกจจากการเป็น CamelCase หรือ snake_case
Antek

21

ทุกคนสามารถใช้เครื่องหมายขีดล่าง_ (ใช้ได้)

ไม่มีใครควรใช้ hypen - (การปฏิบัติที่ไม่ดี)

ไม่มีใครควรใช้อักษรตัวใหญ่ในชื่อแพคเกจ (การปฏิบัติที่ไม่ดี)

หมายเหตุ: ที่นี่ "การปฏิบัติที่ไม่ดี" มีไว้สำหรับทางเทคนิคคุณได้รับอนุญาตให้ใช้ แต่ตามธรรมเนียมแล้วมันไม่ได้มีมารยาทที่ดีในการเขียน

ที่มา: การตั้งชื่อแพ็คเกจ (docs.oracle)


47
ใช่การใช้ยัติภังค์เป็นการฝึกที่ไม่ดีเพราะเป็นข้อผิดพลาด และการเขียนโค้ดที่ไม่ได้รวบรวมนั้นเป็นการปฏิบัติที่ไม่ดีอย่างแน่นอน
glglgl

ลิงก์ดี - ช่วยให้บริบททั้งหมดนี้เมื่อคุณรู้ว่าแหล่งข้อมูลพูดอะไร ฉันคุ้นเคยกับการประชุมตัวพิมพ์เล็กทั้งหมดเช่นกัน แต่อ้างอิงจากเอกสารดูเหมือนว่ามันเป็นเรื่องของการเลือก / สไตล์ ฉันได้เพิ่มความคิดเห็นไปยังโพสต์ที่เฉพาะเจาะจงถามเกี่ยวกับกรณีอูฐสำหรับชื่อแพคเกจ(ซึ่งฉันไม่คิดว่าเป็นซ้ำของโพสต์นี้ btw - ซึ่งเพิ่งถามเกี่ยวกับการประชุมโดยทั่วไป) stackoverflow.com/questions/36755783/ …
Gene Bo

"ไม่มีตัวอักษรตัวใหญ่" แม้ว่าฉันจะยอมรับว่าตัวพิมพ์ใหญ่ทั้งหมดหรือบางสิ่งที่ดูเหมือน ClassName เป็นความคิดที่ไม่ดี แต่ก็กำจัดตัวอย่างนี้ด้วย การพูดว่า "เป็นการปฏิบัติที่ไม่ดี" เป็นเรื่องเกี่ยวกับเหตุผลที่คลุมเครือคลุมเครือและไร้ความหมายที่สุดที่ฉันนึกออก นี่สามารถอธิบายเพิ่มเติมได้หรือไม่? (เช่นกำหนด 'การปฏิบัติที่ไม่ดี')
Manius

คุณยังคงพูดว่า "แย่" โดยไม่ให้เหตุผลว่าทำไมจึงควรถือว่าไม่ดี มันทำลายเครื่องมือหรือไม่? สร้างความสับสนใช่ไหม อ่านหรือพิมพ์ยากกว่าไหม? สำหรับตัวอย่างที่ให้มาฉันคิดว่าเราสามารถตอบตกลงได้กับหลาย ๆ คน แต่ฉันไม่เข้าใจการห้ามใช้อักษรตัวใหญ่อย่างเด็ดขาด ชื่อแพ็กเกจ LikeThis (เช่นชื่อคลาส) สร้างความสับสนอย่างเห็นได้ชัด แต่ LikeThis ไม่สับสนกับฉันและดูเหมือนจะอ่านง่ายขึ้นสำหรับชื่อแพ็กเกจคำสองคำเช่น bigdataSource (เทียบกับ "bigdatasource") เว้นแต่จะมีเหตุผลบางอย่างที่ camelCase เป็นความคิดที่ไม่ดีสำหรับแพ็คเกจที่ฉันไม่รู้
Manius

กลับกลายเป็นว่าฉันพลาดสิ่งนี้ไปแล้ว: oracle.com/technetwork/java/codeconventions-135099.html ตัวพิมพ์เล็กทั้งหมดเป็นส่วนหนึ่งของแผนการประชุมชื่อของ Oracle ฉันยังคงคิดว่ามันเป็นวิธีการที่ค่อนข้างเส็งเคร็งในการแยกกรณีของอูฐซึ่งเริ่มต้นต่ำลงสำหรับช่วงเวลาที่หายากเมื่อคุณจำเป็นต้องใช้ชื่อแพคเกจสองคำและไม่สมเหตุสมผลที่จะทำให้มันเป็นสองไดเรกทอรี แต่โอ้ดี
Manius

18

อนุสัญญาการตั้งชื่ออย่างเป็นทางการนั้นไม่เข้มงวดนักพวกเขาไม่แม้แต่ห้ามใช้เครื่องหมายอูฐในกรณียกเว้นยกเว้นคำนำหน้า ( comในตัวอย่างของคุณ)

แต่โดยส่วนตัวฉันจะหลีกเลี่ยงตัวอักษรตัวใหญ่และยัติภังค์แม้ตัวเลข ฉันต้องการให้com.stackoverflow.mypackageBragboy แนะนำเช่นกัน

(การใส่ไฮเฟ็น '-' ไม่ถูกต้องในชื่อแพ็คเกจ)

แก้ไข

สิ่งที่น่าสนใจ - ข้อกำหนดทางภาษามีบางอย่างที่จะพูดเกี่ยวกับการตั้งชื่ออนุสัญญาด้วย

ในบทที่ 7.7 ชื่อแพ็กเกจที่ไม่ซ้ำกันเราจะเห็นตัวอย่างที่มีชื่อแพคเกจที่ประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่ (ดังนั้นสัญกรณ์ CamelCase จะเป็น OK) และพวกเขาแนะนำให้แทนที่การใช้ไฮเฟ็นด้วยเครื่องหมายขีดล่าง ("mary-lou" -> "mary_lou") คำหลักที่มีเครื่องหมายขีดล่าง ("com.example.enum" -> "com.example._enum")

ตัวอย่างเพิ่มเติมสำหรับตัวอักษรตัวพิมพ์ใหญ่ในชื่อแพคเกจที่สามารถพบได้ในบทที่6.8.1 แพคเกจชื่อ


2
ดังที่ Andreas ได้กล่าวไว้ไม่มีกฎเกี่ยวกับการใช้ปลอกด้านบนในชื่อแพ็คเกจ เหตุผลเฉพาะข้อหนึ่งที่ควรหลีกเลี่ยงคือฉันเห็นคนประสบปัญหากับชื่อแพคเกจกรณีผสมเมื่อทำการพัฒนาข้ามแพลตฟอร์ม โดยเฉพาะอย่างยิ่งเมื่อมีคนตัดสินใจที่จะเปลี่ยนชื่อหรือเปลี่ยนกรณีของแพคเกจที่คุณกำลังแล้วอาศัยทั้ง VCS และการพัฒนาสภาพแวดล้อมของคุณที่จะทำว่าสิ่งที่ถูกต้องด้วยกรณีไดเรกทอรี
Shorn

2
ที่จริงแล้วมีกฎ: "คำนำหน้าของชื่อแพคเกจที่ไม่ซ้ำกันมักจะเขียนด้วยตัวอักษร ASCII ตัวพิมพ์เล็ก" ( oracle.com/technetwork/java/codeconventions-135099.html )
Jose Gómez

4

ขีดล่างดูน่าเกลียดในชื่อแพคเกจ สำหรับสิ่งที่มีค่าในกรณีของชื่อสารประกอบของสามหรือมากกว่าคำพูดที่ผมใช้ชื่อย่อ (ตัวอย่างเช่นcom.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo) package-info.javaแล้วเอกสารวัตถุประสงค์แพคเกจใน


4
สิ่งนี้อาจไม่สามารถอ่านได้และยากที่จะเข้าใจเนื้อหาของแพ็คเกจโดยดูที่ชื่อแพ็คเกจ
Vishal Akkalkote

1
ยุติธรรมพอสมควร นั่นเป็นเหตุผลที่ฉันแนะนำให้ใช้เอกสาร ฉันจะใช้วิธีนี้เมื่อใดก็ได้แทนการเรียงคำเต็ม (apiratesheet - นั่นคือ 'API Rate Sheet' หรือ 'A Pirate Sheet'?)
jpangamarca

1

การต่อคำในชื่อแพ็คเกจเป็นสิ่งที่นักพัฒนาส่วนใหญ่ไม่ทำ

คุณสามารถใช้สิ่งที่ชอบ

com.stackoverflow.mypackage

อ้างอิงการประกาศชื่อ JLS

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