ตัวแปรควรชื่อ Id หรือ ID หรือไม่ [ปิด]


126

นี่เป็นเรื่องอวดรู้เล็กน้อย แต่ฉันเคยเห็นบางคนใช้Idใน:

private int userId;
public int getUserId();

และอื่น ๆ ใช้:

private int userID;
public int getUserID();

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


40
ความสอดคล้องเป็นสิ่งที่สำคัญที่สุดที่มีความสำคัญ ไม่ว่าจะเป็นกรณีอูฐหรือขีดเส้นใต้หรืออะไรก็ตาม คงเส้นคงวา.

38
ดู API XML ของภาษาของคุณเพื่อดูว่าพวกเขาทำได้อย่างไร Java ชั้นเรียนชื่อเหมือนSAXParserและDOMException, .NET XmlDocumentชั้นเรียนชื่อเช่น จากนั้นฉันจะพูดว่า "ID" ใน Java, "Id" ใน C #
luiscubal

1
แต่ตัวบ่งชี้ตัวพิมพ์ใหญ่จะใช้ใน Java สำหรับเขตข้อมูลคงที่ดังนั้นชื่อ "ID" สำหรับเขตข้อมูลพื้นฐานจึงไม่ใช่ตัวที่ดีที่สุด และมีความมั่นคงมา ...
เซเลอร์ Danubian

8
คุณจะตั้งชื่อตัวแปรEGOและSuperEGO? ฉันไม่คิดอย่างนั้น ;)
kojiro

4
อะไร?! สอดคล้อง? สงครามความโกรธอยู่ที่ไหน! นั่นแหล่ะฉันขอเสนอชื่อผู้ดูแลตัวเองของเปลวไฟซินตาอูฐกรณีที่ศักดิ์สิทธิ์และพระราชกฤษฎีกาว่าการทำมันด้วยตัวพิมพ์ใหญ่ทั้งหมดสำหรับ acryonyms สำหรับ noobs นอกจากนี้มันถูกต้องที่จะต้องม้วนกระดาษชำระจากด้านบนเว้นแต่คุณจะมีแมวที่เบื่อและทำสิ่งแปลก ๆ ซึ่งในกรณีที่พวกเขามีเวลามากขึ้นในการไขกระดาษชำระให้ม้วนจากด้านล่างซึ่งเป็นสิ่งที่ยอมรับได้สำหรับ เจ้าของแมว ฉันไม่รู้ว่าทำไมฉันถึงออกกฤษฎีกา บ๊อบผู้รักษาประตูแห่งเปลวไฟอันศักดิ์สิทธิ์ของทิศทางชักโครกกำลังยุ่งอยู่ฉันคิดว่า
Erik Reppen

คำตอบ:


56

กฎที่สำคัญที่สุดในการปฏิบัติตามในกรณีเหล่านี้คือความสอดคล้อง: ทำตามที่คนอื่นทำ

ตัวอย่างเช่นดู API ของภาษา XML ของคุณเพื่อดูว่าพวกเขาทำได้อย่างไร

ชั้นเรียนชื่อ Java เช่นSAXParserและDOMExceptionเรียนชื่อ .NET เช่นXmlDocument

จากนั้นฉันจะพูดว่า "ID" ใน Java, "Id" ใน C #

อย่างไรก็ตามฉันเห็นว่า Java EE 6 มีชื่อกำกับ@Id (ดูเอกสารประกอบ ) ดังนั้นดูเหมือนว่า Java จะถือว่า "Id" เป็นเพียงคำปกติ


@Id ชี้ไปที่ชื่อคลาสคำอธิบายประกอบไม่ใช่ชื่อตัวแปร ตัวอย่างผิดพลาด
jwenting

3
SAXParser อาจเป็น (และโชคดีที่ไม่ใช่) SimpleAPIforXMLParser (หรือแม้แต่ SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser) อักษรตัวใหญ่แต่ละตัวเริ่มต้นของคำ ดังนั้นแม้แต่ในจาวาก็ควรเป็น "Id"
user470365

2
@ jwenting ปัญหาคือการค้นหาว่า "id" ถูกพิจารณาว่าเป็นคำหรือเหมือนสองคำ @Idบอกว่ามันเป็นคำเดียวดังนั้นชื่อตัวแปรจะเป็น "id"
luiscubal

ไม่ SAX เป็นตัวย่อในขณะที่ Id ไม่ใช่
nalply

8
คุณถูกต้องเกี่ยวกับการใช้Idใน C # (และ. NET โดยทั่วไป) แต่ด้วยเหตุผลอื่น กฎนั้นใช้อักษรตัวพิมพ์ใหญ่ทั้งหมดสำหรับตัวย่อ 2 ตัวอักษร (เช่นIPAddress) และใช้อักษรตัวพิมพ์ใหญ่ตัวย่อที่ยาวกว่าเท่านั้น (เช่นตัวอย่างที่XmlDocumentคุณให้) แต่IdและOkเป็นข้อยกเว้นของกฎนี้กล่าวถึงโดยเฉพาะ สำหรับข้อมูลโดยย่อโปรดดูCapitalization Rules for Acronymsหัวข้อของCapitalization Conventionsบทความ แต่ถึงแม้ Microsoft จะDbConnectionDBNull
ละเมิด

110

ความมั่นคงเป็นกษัตริย์ เลือกอย่างใดอย่างหนึ่ง แต่ทำอย่างสม่ำเสมอทุกที่

ที่กล่าวว่าฉันชอบรูปแบบแรกเพราะมันไม่ได้ละเมิด camelCase (การทำเช่นนั้นหมายความว่าคุณมีกฎสไตล์สองแบบที่ต้องจำไม่ใช่เพียงหนึ่ง)

บางครั้งใช้ตัวพิมพ์ใหญ่สองตัวด้วยเหตุผลนี้แต่ ID เป็นเพียงรูปแบบของการแสดงตัวตน


18
ฉันหนึ่งไม่ชอบถ้าโปรแกรมคอมพิวเตอร์พยายามเข้าถึง id ของฉัน
Blrfl

1
userIdOfSender
Sean McSomething

19
@SeanMcSomething: Ick SenderUserId
Robert Harvey

5
ในขณะที่ฉันเห็นด้วยกับคุณว่า "Id" เป็นวิธีที่ต้องการฉันสามารถดูว่าเกิดความสับสนในที่ใด: ในการสนทนาแบบวันต่อวันเราพูดตามจริงว่าเป็นคำย่อหรือ "ฉันจะเห็น ID ของคุณได้หรือไม่"
500 - ข้อผิดพลาดเซิร์ฟเวอร์ภายใน

3
ดูตัวย่ออื่น ๆ ในกล่องอูฐ มี SoapProtocol ไม่ใช่ SOAPProtocol ID นั้นสั้นสำหรับเอกสารประจำตัวดังนั้นฉันไม่เห็นว่าทำไมจึงควรได้รับการปฏิบัติในกรณีพิเศษในกรณีอูฐ ที่กล่าวว่าฉันต้องการให้ userID ใช้อย่างสม่ำเสมอมากกว่า userId และ userID ใช้อย่างไม่สอดคล้องกันในโปรแกรมของฉัน
Neil

76

TL; DR:ในบริบทของไลบรารีคลาส. NET, Microsoft แนะนำให้คุณใช้ Id สิ่งนี้ค่อนข้างตอบโต้ได้ง่ายเนื่องจากเป็นตัวอย่างที่หายากของตัวย่อที่ได้รับอนุญาต / แนะนำ (โดยทั่วไปแล้วตัวย่อจะขมวดคิ้ว)

ถ้าเรากำลังพูดถึงเกี่ยวกับ C # หรือระดับ .NET ประชุมห้องสมุดไมโครซอฟท์มีบางส่วนที่เป็นธรรมทั้งกำหนดหลักเกณฑ์การตั้งชื่อที่มีอยู่ พวกเขามีความคิดที่ดีพร้อมคำอธิบายมากมายเกี่ยวกับปัญหาที่หลากหลาย - ที่จริงแล้วนักพัฒนาทุกคนควรใช้เวลาพอสมควรในการอ่านหัวข้อแนวทางการออกแบบทั้งหมด

เมื่อพูดถึงคำย่อกฎของหัวแม่มือคือ: สำหรับตัวย่อสองตัวอักษรคุณมักจะเก็บไว้เป็นตัวพิมพ์ใหญ่ (ในกรณีที่ใช้ Pascal case) เช่นIOStreamอาจเป็นชื่อของคลาส สำหรับตัวย่ออีกต่อไปคุณกรณีที่ต่ำกว่าส่วนที่เหลือของตัวย่อเช่นหรือXmlDocument HtmlParserนี่เป็นกฎที่ไม่น่าสงสัยเป็นส่วนใหญ่ (ไม่มีความสับสนว่าคำใดคำหนึ่งจบลงและคำต่อไปเริ่มต้นเว้นแต่คุณจะผูกมัดตัวย่อสองตัวอักษร) และคุณจะคุ้นเคยกับมันเร็วมาก

ดังนั้นมันคือ ID หรือ Id? จากข้อมูลของ Microsoft อาจไม่ใช่สิ่งที่คุณคิด:

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

ตัวย่อสองตัวที่สามารถใช้ในตัวระบุได้คือ ID และ OK ในตัวระบุที่ปาสคาลควรปรากฏเป็น Id และ Ok หากใช้เป็นคำแรกในตัวระบุอูฐพวกเขาควรปรากฏเป็น id และ ok ตามลำดับ

โดยทั่วไปฉันไม่แน่ใจจริง ๆ ว่าเมื่อความแตกต่างนี้เริ่มปรากฏในแนวทางปฏิบัติ แต่ไม่กี่ปีหลัง (ประมาณ 3.0 / 3.5) แนวโน้มการตั้งชื่อทั่วไปในไลบรารีคลาสเปลี่ยนจาก ID เป็น Id


1
นี่คือแนวทางที่ฉันมักจะปฏิบัติตาม เนื่องจาก id เป็นตัวย่อและไม่ใช่ตัวย่อฉันจึงชอบใช้ 'Id' เสมอ
Toby

ผมใช้ ID เพราะนั้นจะแบ่งการประชุมและยืนออกเป็นที่ไม่ซ้ำกันและฉันชอบประชด :) ว่า
RhysW

ฉันคิดว่า Microsoft ผิด ID เป็นข้อมูลเริ่มต้นสำหรับเอกสารประจำตัว แต่ไม่ใช่แบบย่อสำหรับตัวตน (อุกอาจคำย่อสามารถออกเสียงได้)
Tom Hawtin - tackline

@ TomHawtin-tackline คุณทำให้ประเด็นที่น่าสนใจแม้ว่าฉันสงสัยว่ามันขึ้นอยู่กับบริบท บางอย่างเช่นคุณสมบัติ IDNumber บนวัตถุบุคคลนั้นจะสมเหตุสมผล แต่สำหรับ VehicleId ที่จะอ่านเป็น "เอกสารประจำตัวยานพาหนะ" กับ "รหัสประจำตัวยานพาหนะ" หรือไม่ ในการเขียนโปรแกรมบริบทตัวระบุเป็นคำทั่วไปที่ค่อนข้างสวยสำหรับสิ่งใดก็ตามที่ระบุอินสแตนซ์ที่ไม่ซ้ำกันและฉันขอยืนยันว่ามันมีประโยชน์มากกว่า
Daniel B

@DanielB ในภาษาคอมพิวเตอร์ SQL แม้แต่ "ตัวระบุ" มักจะหมายถึงชื่อเช่นชื่อของคอลัมน์ โดยทั่วไปแล้วมันจะย่อให้ "ident" ยานพาหนะเป็นตัวอย่างที่น่าสนใจเนื่องจากมีการกำหนดรูปแบบ VIN (หมายเลขประจำตัวยานพาหนะ) ในบริบทการเขียนโปรแกรมทั่วไป "เอกสาร" สำหรับเอนทิตีคือตัวเลข (อาจเป็นความสามารถที่ไม่สามารถคาดเดาได้)
Tom Hawtin - tackline

15

ฉันอ่านคำอธิบายที่ดีมากในเอกสารของอนุสัญญาการเข้ารหัส CamelCase ควรใช้สำหรับตัวย่อและตัวย่อเสมอเนื่องจากง่ายต่อการแยกขอบเขตของคำ (เปรียบเทียบXmlIdWriterกับXMLIDWriter)


12
นี่คือความคิดที่ดียิ่งขึ้นสำหรับการแยกขอบเขตคำ: ขอบเขตคำที่แท้จริง! xml_id_writer.
Kaz

4
@Kaz เอ่อ! อย่างไรก็ตาม CamelCase มีการใช้แบบดั้งเดิมในบางภาษาและมันจะค่อนข้างออกนอกสถานที่เพื่อใช้ขีดเส้นใต้ในสถานการณ์เช่นนี้ ความมั่นคงเป็นราชาดังที่ได้กล่าวไว้ก่อนหน้านี้
gilden

1
การใช้ CamelCase เพียงเพราะไลบรารีแกนหลักของภาษาบางภาษาใช้งานไม่สอดคล้อง แต่เป็นไปตามมาตรฐาน
Kaz

3
@Kaz: คุณมีการต่อสู้ที่ยิ่งใหญ่กว่าที่จะต่อสู้ในร้านค้าของคุณมากกว่าแบบแผนรหัส
Robert Harvey

2

ตามที่เราเห็นในฟังก์ชั่นเริ่มต้นของ JavaScript getElementById (); รหัสถูกเขียนในกรณีของอูฐ ...

ใช้ 'id' หากใช้กับขีดล่าง ตัวอย่าง: user_id

ใช้ 'Id' หากตั้งชื่อ var โดยไม่มีขีดล่างเพื่อแยกคำที่แตกต่างออกไป ตัวอย่าง: userId

หากตัวแปรคำเดียวควรเป็นตัวพิมพ์เล็กทั้งหมดถ้ามีหลายคำ var ให้ใช้ตัวพิมพ์เล็ก Camel ตัวอย่าง: นี่คือตัวอย่าง

แต่ฉันจะไม่แนะนำ 'ID' ทั้งหมดใน CAPS เพราะโดยทั่วไปเราใช้ตัวพิมพ์ใหญ่ทั้งหมดเพื่อกำหนด CONSTANTS


ในย่อหน้าที่สามตัวอย่างของคุณดูเหมือนจะไม่ตรงกับข้อความของคุณ?
ruakh

@ruakh thanx .. แก้ไข ..
Sukrit Gupta

0

ครั้งแรกหลีกเลี่ยงตัวย่อ

ประการที่สองหากตัวย่อเป็นที่รู้จักกันดีฉันแนะนำให้ใช้ตัวอูฐ

นั่นเป็นเพราะคุณไม่จำเป็นต้องพิจารณาความหมายของสิ่งนั้น เพียงแค่ถือว่าเป็นคำปกติ

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