วิธีเขียนคำว่าอูฐสำหรับคำเช่น "phonenumber", "มอเตอร์ไซค์", "wavelength" ฯลฯ


75

ฉันมีปัญหาในการทำความเข้าใจวิธีใช้ไวยากรณ์ camelCaseกับชื่อตัวแปรบางส่วนของฉัน

ตัวอย่างเช่นฉันควรเขียนคำอย่าง "phonenumber" ในกรณีอูฐอย่างไร มันเป็นphoneNumberหรือphonenumber? เช่นเดียวกันกับ "ชื่อผู้ใช้" ใช่usernameหรือuserNameไม่

ฉันคิดว่ามันไม่ได้มองขวามีกรณีเช่นอูฐmotorCycle, passWord, sunDay, setUpหรือwaveLengthเพราะสิ่งเหล่านี้เป็นเพียงหนึ่งในแต่ละคำ ฉันคิดว่าอาจเป็นสาเหตุที่เรียกว่าhashMapแต่hashtableในกรณีอูฐที่ไม่มีทุนในกรณีสุดท้ายเพราะ hashtable เป็นหนึ่งคำในขณะที่แฮชแผนที่คือสองคำ

แต่ถ้ามอเตอร์ไซค์มีสีก็จะเป็นmotorcycleColorเพราะคำต่อกัน? ว่าถูกต้องหรือมันควรจะเป็นphoneNUmber, waveLength, sunBlockและแม้กระทั่งsunDayสำหรับวันอาทิตย์ของสัปดาห์?

ทำไมตัวอย่างเป็นวิธีการที่เรียกว่าgetISOCountriesในขณะที่มันพูดว่าHttpHeadersเช่นมันไม่ชัดเจนว่าจะกลายเป็นตัวพิมพ์เล็กถ้าเรามีวิธีการเหมือนหรือString camelCaseString = dog.toCamelCase()interface CamelCase

ที่เกี่ยวข้อง: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces


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

2
เป็นคำถามที่ดีมากฉันมักถามตัวเองเสมอว่าจะเขียน "ชื่อไฟล์" (และ "ชื่อไฟล์" ผิด) ฉันคิดว่าคำนี้เขียนขึ้นแตกต่างจากโปรแกรมเมอร์ไปจนถึงโปรแกรมเมอร์ ...
เรย์

3
@PacMani คุณอาจเพลิดเพลินกับการสนทนาที่นี่ !
Jason C

4
@ 909Niklas ฉันจะวาง "ชื่อ" ทั้งหมดเท่าที่จะทำได้ เพียงใช้ "ถนน" หากเป็นสตริงชื่อนั้นจะเป็นชื่อเว้นแต่ว่าเป็นอันตรายหรือสร้างความสับสน usernameมันคืออะไรมันเป็นสัญญาณการโทรไม่ใช่ "ชื่อผู้ใช้" ดังนั้นมันจึงเป็นเหมือนมอเตอร์ไซค์มากกว่าชื่อแรกหรือนามสกุล (ซึ่งควรจะเป็น camelcased)
Peter Turner

2
@PeterTurner โปรแกรมเมอร์บางคนบอกว่าstreetควรเป็นคลาสและnameเป็นหนึ่งในคุณลักษณะ / ข้อมูลสมาชิก
JAB

คำตอบ:


173

คุณควรใช้อักษรตัวพิมพ์ใหญ่หลังจากที่มี "ช่องว่าง" ตามปกติจะเป็นช่องว่าง (เมื่อคุณเขียนจดหมายแทนที่จะเป็นรหัสต้นฉบับ) สมมติฐานแรกของคุณถูกต้อง:

  • มันเป็น "รถจักรยานยนต์" ไม่ได้เป็น "มอเตอร์รอบ" ดังนั้นตัวแปรของคุณควรตั้งชื่อไม่ได้motorcyclemotorCycle
  • มันเป็น "แผนที่กัญชา" เพื่อให้คุณไปด้วยไม่ได้hashMaphashmap
  • "อาทิตย์" เป็นหนึ่งในคำ -> ไม่sundaysunDay
  • ขณะที่ "วันของสัปดาห์" จะไม่dayOfWeekdayofweek

4
สำหรับสิ่งที่คุ้มค่าทีมของฉันและฉันมักใช้hashmapเป็นคำเดียวแม้ว่าเราจะไม่ทำtree mapอย่างนั้น ยัก
corsiKa

1
รถจักรยานยนต์นั้นเป็นเคสแบบขอบ (อันที่จริงแล้วเป็นวงจรรถจักรยานยนต์ แต่ตอนนี้มันต่างออกไป); honeyBee(และไม่ได้honeybeeในความเป็นจริงไม่ได้ "ผึ้ง" แต่ "ผึ้ง") butterflyและ
orome

3
ไม่ใช่ adressed setUpกรณีเป็นกรณีที่ขอบ แต่ก็เป็นคำเดียว แต่ในอดีตก็เริ่มต้นการติดตั้งชื่อJUnit setUp
TC1

23
@ TC1 ที่จริงแล้ว"setup" เป็นคำนามไม่มีคำกริยา "ตั้งค่า" รูปแบบการกระทำที่ถูกต้อง JUnitมันถูกต้องส่วนที่เหลือของเราเป็นกรณีขอบ :)
Jason C

3
@ JasonC ขอบคุณในที่สุดมันก็สมเหตุสมผลว่าทำไมส่วนเคาน์เตอร์คือtearDown: D
TC1

44

ส่วนที่ 1
ผมคิดว่าสิ่งที่สะดุดคุณขึ้นคือบางส่วนของตัวอย่างของคุณคำประสมขณะที่คนอื่นไม่ได้

  • หมายเลขโทรศัพท์ // ไม่ใช่คำประสม
  • รถจักรยานยนต์ // คำประสม
  • ความยาวคลื่น // คำประสม
  • กันแดด // คำประสม
  • วันอาทิตย์ // คำประสม *
  • สีมอเตอร์ไซค์ // คำประสมที่ใช้กับคำที่ไม่ผสม

คำผสมไม่เป็นไปตามสัญกรณ์กรณีอูฐสำหรับคำที่สองในคำประสม

ดังนั้นจึงเป็นและไม่ได้motorcyclemotorCycle

แต่ "หมายเลขโทรศัพท์" ไม่ใช่คำประสมและจะเป็นไปตามสัญกรณ์กรณีอูฐ phoneNumberกล่าวคือ

และนั่นนำไปสู่: motorcycleColor.

หากฉันจำไม่ได้ว่าคำใดเป็นคำประสมอย่างแท้จริงหรือไม่ฉันค้นหาในพจนานุกรมเพื่อให้แน่ใจ

ส่วนที่ 2
ตัวอย่างสองตัวอย่างของคุณนั้นค่อนข้างหลอกลวง

  • แผนที่แฮช
  • ตารางแฮช

พวกมันมีเล่ห์เหลี่ยมเพราะบางคนสะกดว่า "hashmap" และ "hashtable" ตามพจนานุกรมที่ฉันเพิ่งตรวจสอบพวกเขาเป็นคำแยกต่างหากและไม่ใช่คำผสม ดังนั้นกรณีอูฐที่ถูกต้องจะเป็นและhashMap hashTableไม่ใช่ทุกทีมที่ทำตามการประชุมนั้นดังนั้นคุณต้องถามเพื่อนร่วมทีมของคุณว่าพวกเขาชอบอะไรแล้วทำตามนั้น ความสอดคล้องมีความสำคัญมากกว่าในกรณีนี้มากกว่าที่พจนานุกรมอาจบอกว่าถูกต้อง

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


6
วันอื่น ๆ ของสัปดาห์ก็มีสารประกอบทั้งหมดเช่น: "วันจันทร์" <- วันจันทร์, อังคาร <- วัน Tiw, วันพุธ <- วัน Woden, วันพฤหัสบดี <- วันของ Thor, วันศุกร์ <- วัน Frigg, วันเสาร์ <- วันเสาร์
kevin ไคลน์

6
@kevincline: รูปแบบเหล่านั้นของชื่อของวันนั้นอาจถูกพิจารณาว่าคร่ำครวญในขณะนี้ดังนั้นอย่านับเพื่อการปฏิบัติจริง ๆ ... ยกเว้นว่าคุณจะเขียนโค้ดที่ดูเหมือนว่าif (currentDay == thorsDay) {...อืม ... ห้องสมุดวันที่แย่เกินไปไม่มีตัวเลือกการจัดรูปแบบเมื่อคุณต้องการรับชื่อเต็มของวันในสัปดาห์
FrustratedWithFormsDesigner

15
@FrustratedWithFormsDesigner: ประเด็นก็คือในการใช้งานที่ทันสมัย ​​Sunday เป็นคำประสมในระดับเดียวกันกับวันจันทร์ที่: ไม่ได้เลย เป็นเพียงอุบัติเหตุที่ "ดวงอาทิตย์" ใน "วันอาทิตย์" สามารถยืนอยู่คนเดียวในขณะที่ "วันจันทร์" ถูกย่อให้เป็น "วันจันทร์"
วินไคลน์

6
ยังดีกว่าใช้ชื่อที่ดีกว่าสำหรับตัวแปรของคุณมากกว่า hashMap หรือ hashTable เป็นถนนลื่นที่นำไปสู่บรรทัดรหัสที่ยอดเยี่ยมนี้:HashMap hashMap = new HashMap();
Eric Andres

8

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

เพื่อป้องกันสิ่งนี้โปรแกรมเมอร์ควรใช้การอ้างอิงมาตรฐาน (เช่นdictionary.com ) เมื่อไม่แน่ใจเกี่ยวกับการสะกดคำหรือการใช้อักษรตัวพิมพ์ใหญ่ อย่างไรก็ตามหากความสอดคล้องในการตั้งชื่อมีความสำคัญต่อโครงการของคุณจะไม่มีสิ่งใดทดแทนการตรวจสอบโค้ด

การเลือกการอ้างอิงเดียวสำหรับโครงการของคุณจะแก้ไขข้อโต้แย้งส่วนใหญ่เกี่ยวกับการใช้อักษรตัวใหญ่และการสะกดคำ มีสารประกอบบางอย่างเช่น Hashtable ที่ไม่ได้อยู่ในพจนานุกรม แต่เป็นตัวพิมพ์ใหญ่เป็นคำเดี่ยวใน Java และ C # API คุณจะต้องทำการตัดสินใจเกี่ยวกับสิ่งเหล่านั้น ใน Java คือ "HashMap" แต่ "Hashtable" IMO "Hashtable" ไม่ถูกต้องชัดเจน มันจะไม่ปรากฏเป็นคำเดียวยกเว้นชื่อใน API


4

วิธีที่ง่ายที่สุดในการทำตัวอูฐคือการใช้การแบ่งคำ

ตัวอย่างจากคำถามของคุณ:

  • หมายเลขโทรศัพท์: หมายเลขโทรศัพท์
  • รถจักรยานยนต์: รถจักรยานยนต์
  • วันอาทิตย์: วันอาทิตย์
  • ความยาวคลื่น: ความยาวคลื่น

หากคุณไม่แยกเป็นสองคำคุณไม่ควรใช้กล่องอูฐกับมัน มิฉะนั้นคุณจะใช้มันในพยางค์

  • auxIlIArY (นี่คือคำที่มี 5 พยางค์ไม่ต้องพูดถึงฉันกำลังมองหาอึในแบบอักษรที่ไม่ใช่ monospaced / sans-serif)

5
หมายเลขโทรศัพท์ไม่ใช่คำของตัวเองใส่ไว้ใน google เป็นคำเดียวมันจะค้นหาทุกอย่างที่มี "เบอร์โทรศัพท์" ไม่ใช่หมายเลขโทรศัพท์อย่างมีความสุข และการตั้งค่าไม่ใช่คำสองคำและไม่มีรหัสผ่าน
Jeff Langemeier

6
@JeffLangemeier คำพูดเล็ก ๆ น้อย ๆ :“ การตั้งค่า” เป็นคำนามในขณะที่“ ตั้งค่า” เป็นคำกริยา ดังนั้นถ้าคุณมีวัตถุที่เป็นตัวแทนของวิธีการบางอย่างมีการตั้งค่ามันจะถูกเรียกว่าในขณะที่ถ้าคุณมีฟังก์ชั่นบางสิ่งบางอย่างที่จะตั้งขึ้นก็จะถูกเรียกว่าsetup setUp
bdesham

2
@desham ฉันรู้ว่า แต่ฉันจะอยู่ห่างจาก setUp เนื่องจากคำกริยาที่ดีกว่าและคลุมเครือน้อยกว่าจะเริ่มต้นฉันจริงลืมเกี่ยวกับการตั้งค่าเวอร์ชันกริยาอย่างสมบูรณ์
Jeff Langemeier

1
ฉันคิดว่าสิ่งที่เริ่มต้นด้วย "wa" อาจเป็นwavelengthหรือwaveLengthขึ้นอยู่กับว่าค่าที่เป็นปัญหานั้นเกี่ยวข้องกับความเร็วการแพร่กระจายหารด้วยความถี่หรือว่าเกี่ยวข้องกับ "ความยาว" (ไม่จำเป็นต้องมีระยะทาง) ของคลื่นบางชนิด . ยกตัวอย่างเช่นตัวแปรสังเคราะห์ห้องสมุดเสียงของจำนวนตัวอย่างที่เกี่ยวข้องกับคลื่นจะไม่เป็นแต่wavelength waveLength
supercat

2
@kevincline: ในเอ็นจิ้นการสังเคราะห์เสียงมันเป็นเรื่องธรรมดาที่จะมีตารางคลื่นที่มีตัวอย่างคลื่นทั้งหมด เมื่อเล่นถึงจุดสิ้นสุดของตารางมันวนกลับไปที่จุดเริ่มต้น (สำหรับเอ็นจิ้นธรรมดา) หรือจุดอื่นในคลื่น เพื่อให้แน่ใจว่าWaveLengthด้วยตัวเองจะค่อนข้างคลุมเครือในสถานการณ์ที่ง่ายที่สุด [อ้างถึงขนาดบัฟเฟอร์หรือความยาวของส่วนวนซ้ำ] แต่คำต่าง ๆ อาจปรากฏได้อย่างสมบูรณ์ในชื่อที่ยาวขึ้น
supercat

4

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

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

และในภาษาอังกฤษสามวิธีหลักในการเขียนคำประสมคือเปิด (โดยมีช่องว่างระหว่างคำสองคำ) ยัติภังค์และปิด (โดยไม่มีช่องว่างหรือยัติภังค์ระหว่างทั้งสอง) และในขณะที่มีกฎเกณฑ์บางประการเกี่ยวกับการใช้เครื่องหมายยัติภังค์แบบเปิดในบางสถานการณ์ แต่ก็มีกฎเกณฑ์ที่เข้มงวดไม่มากนักสำหรับการรู้ว่ารูปแบบใดที่ใช้สำหรับสารประกอบที่กำหนดนอกเหนือจากการเห็นสิ่งที่คนอื่นทำและยังมีเวลาที่คุณ จะพบสองหรือสามรูปแบบ ( ตัวอย่างเช่นeggbeater , ผู้ตีไข่และผู้ตีไข่ )

ที่นี่หมายเลขโทรศัพท์มักจะเขียนเปิดเสมอดังนั้นควรถือว่าเป็นสองคำ

และเมื่อการแม็พระหว่างการสร้างโทเค็นพื้นที่หรือเครื่องหมายขีดคั่นจะถูกลบออกและคำที่สองและต่อมาที่เขียนในหัวเรื่อง - เคสดังนั้นphoneNumberหรือPhoneNumberเหมาะสมกับการประชุมของคุณ

สิ่งที่ทำให้phoneNumberดูแปลก ๆ อาจเป็นไปได้ว่ามันเป็นเรื่องปกติมากกว่าphoneในบริบทส่วนใหญ่หรือnumberเมื่อบริบทเกี่ยวกับการเชื่อมต่อทางโทรศัพท์


2

ประกันความมั่นคงภายในไฟล์รหัส

ส่งเสริมความมั่นคงภายในโครงการรหัส

ต้องการความสอดคล้องภายในไลบรารีโค้ด

การรวมคำเพื่อแสดงแนวคิดการเปลี่ยนแปลงเมื่อเราคุ้นเคยกับการเกาะติดกันมากขึ้น

ตัวอย่างเช่น...

  • 'ชุดโทรศัพท์' กลายเป็น 'โทรศัพท์' สั้นลง
  • 'โทรศัพท์' สั้นลงเหลือแค่ 'โทรศัพท์'
  • 'หมายเลขโทรศัพท์' บางครั้งถูกทำสัญญาเป็น 'หมายเลขโทรศัพท์'
  • 'หมายเลขโทรศัพท์' ในไม่ช้าก็กลายเป็น 'โทรศัพท์'
  • 'phonenumber' มักถูกย่อให้เหลือเพียง 'โทรศัพท์'
  • 'โทรศัพท์มือถือ' หรือ 'มือถือ' เป็นสิ่งที่ใช้กันทั่วไปในปัจจุบัน
  • 'โฮมโฟน' และ 'โทรศัพท์บ้าน' อาจกลายเป็นเรื่องปกติเช่นกัน

โปรดทราบว่าตัวตรวจการสะกดคำ StackExchange ไม่สามารถตัดสินใจได้ 'Phonenumber' ในตอนท้ายของประโยคข้างต้นนั้นใช้ได้ แต่มันตั้งค่าสถานะที่จุดเริ่มต้นของประโยค (ตัวพิมพ์ใหญ่หรือไม่)

มากที่สุดเท่าที่ทุกคนปรารถนาที่จะมี "หนึ่งในวิธีที่ถูกต้อง" ในการทำสิ่งต่าง ๆ เมื่อพูดถึงภาษา เมื่อคุณเสร็จสิ้นโครงการการใช้งานอาจจะเปลี่ยนไป แน่นอนว่าความเข้าใจของคุณจะมีการเปลี่ยนแปลงและการทำงานของวิธีการ / et.al อาจจะมีการเปลี่ยนแปลงด้วย (ในกรณีนี้คุณควรเปลี่ยนชื่ออย่างเหมาะสม)


-1

จากมุมมองด้านเทคนิค (US) อย่างเข้มงวดโดยที่ xxx-yyy-zzzz คือสิ่งที่คุณคิดว่าเป็น "หมายเลขโทรศัพท์" ส่วน xxx จะเรียกว่ารหัสพื้นที่อย่างถูกต้องส่วน yyy ถูกเรียกอย่างถูกต้องว่า แลกเปลี่ยนและ zzzz ถูกเรียกอย่างถูกต้องว่าหมายเลข

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


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