ตัวระบุสั้น ๆ ไม่ดีหรือไม่? [ปิด]


26

ตัวระบุสั้น ๆ ไม่ดีหรือไม่? ความยาวของตัวระบุมีความสัมพันธ์กับความเข้าใจโค้ดอย่างไร ปัจจัยอื่นใด (นอกเหนือจากความเข้าใจโค้ด) อาจมีการพิจารณาเมื่อพูดถึงตัวระบุชื่อ

เพื่อพยายามรักษาคุณภาพของคำตอบโปรดทราบว่ามีงานวิจัยบางอย่างเกี่ยวกับเรื่องนี้อยู่แล้ว!

แก้ไข

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

ลิงค์เสีย

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


5
จุดข้อมูล ตัวบ่งชี้สั้น ๆ ที่ฉันชอบคือ:ใน:(){ :;:& };:- ฉันบอกว่าคนส่วนใหญ่คิดว่ามันค่อนข้างแย่ ;)

@fennec: ส้อมระเบิดมีแนวโน้มที่จะเป็น
Josh K

ตรวจสอบคำถามของ stackoverflow ที่มีความคิดเห็นเกี่ยวกับการฝึกฝนการเขียนโปรแกรมหนังสือที่โปรแกรมเมอร์ทุกคนควรอ่าน
slu

1
การหลีกเลี่ยงชื่อที่ยาวกว่านั้นไม่ได้หมายความว่าคุณควรใช้ความพยายามพิเศษเพื่อย่อให้สั้นลง
JeffO

1
@cessor ขำ ๆ ที่สิ่งที่ตั้งใจจะเกี่ยวกับการวิจัยถูกปิดตามความคิดเห็น น่าเศร้าที่ฉันเห็นด้วยได้รับคำตอบที่ได้รับ
Daniel C. Sobral

คำตอบ:


67

"กฎ" ที่ดีที่สุดที่ฉันเคยได้ยินคือความยาวชื่อควรเป็นสัดส่วนกับความยาวของขอบเขตของตัวแปร ดังนั้นดัชนีiก็โอเคถ้าร่างกายของลูปมีความยาวไม่กี่บรรทัด แต่ฉันชอบที่จะใช้สิ่งที่มีความหมายมากกว่านี้เล็กน้อยถ้ามันมีความยาวมากกว่า 15ish เส้น


6
ฉันไม่เคยได้ยินเรื่องแบบนี้มาก่อนและฉันไม่คิดว่าหลักการนี้จะปรับปรุงการอ่านโค้ดได้
NimChimpsky

8
@Nim: ฉันเห็นด้วย แม้แต่ในforวงสั้น ๆฉันก็ตั้งชื่อดัชนีcustomerCounterหรืออะไรทำนองนั้น ใช้ความพยายามน้อยที่สุดและทำให้โค้ดของคุณดีขึ้นมาก การใช้ตัวแปรแบบสั้นสำหรับขอบเขตสั้น ๆ ดูเหมือนเป็นข้ออ้างที่จะขี้เกียจ
ไม่มีใคร

2
อืมไม่ใช่กฎหรือแนวทางสำหรับฉัน แต่เป็นวิธีที่ทำให้คุณคิดเกี่ยวกับความยาวและในบริบทนั้นมันสมเหตุสมผลบ้าง แน่นอนฉันไม่คิดว่ามันเป็นข้อแก้ตัวสำหรับความเกียจคร้าน ตัวบ่งชี้ของฉันมักจะนานกว่าไม่นาน (สัญญาณของการถูกสอนปาสกาลตั้งแต่ต้น) ยกเว้นตอนนี้เมื่อฉันได้รับสิ่งต่าง ๆ เช่นคำสั่ง linq และการแสดงออกแลมบ์ดาซึ่งตัวระบุอักขระ 1, 2 หรือ 3 (ปกติพิมพ์ชื่อย่อ) .
Murph

33
+1 สุจริตชื่อ "คำอธิบาย" เป็นเพียงเสียงในห้าบรรทัดสำหรับวง; ฉันคิดว่าคนส่วนใหญ่เข้าใจดีว่าคุณกำลังทำอะไรกับ "ฉัน" ฉันใช้ชื่อที่เป็นคำอธิบายในลูปซ้อนกัน แต่ชื่อเหล่านั้นมีขอบเขตที่ยาวกว่า
Jeremy

18
+1 - การใช้iและjเป็นชื่อสามัญที่นักพัฒนาซอฟต์แวร์ทุกคนควรเข้าใจ IMO
TheCloudlessSky

48

แต่ละตัวแปรควรมีความหมายและชื่อของมันเป็นส่วนหนึ่งของความหมายนั้น และเป็นส่วนสำคัญมากเนื่องจากช่วยให้ผู้อ่านเข้าใจว่ามันคืออะไรโดยไม่ต้องขุดลึกลงไปในอัลกอริทึม i, jเห็นได้ชัดที่จะใช้เป็นดัชนีพวกเขาจะสั้น แต่ข้อมูลมาก bntน่าเกลียดcloseหรือcloseButtonมีความหมาย ดังนั้นการสั้นหรือยาวจึงไม่ใช่สิ่งสำคัญที่สุดสำหรับชื่อตัวแปรมันควรมีความหมาย ความหมายขึ้นอยู่กับบริบทอย่างมาก ตัวอย่างเช่นคุณสามารถให้ชื่อสั้น ๆ เช่นnตัวแปรสตริงท้องถิ่นซึ่งใช้ในบล็อกเล็ก ๆ ของรหัสพูด 10 บรรทัดและหมายถึงชื่อของทรัพย์สิน (vสำหรับค่าเป็นอีกตัวอย่าง)

ดังนั้นชื่อตัวแปรควรจะให้ข้อมูลและมันไม่สำคัญว่าพวกเขาสั้นหรือยาว


2
+1 และเพื่อให้ทราบปิดและปิดปุ่มไม่เหมือนกัน Close เป็นกริยาและดังนั้นควรเป็นชื่อของฟังก์ชั่นหรือวิธีการ ในขณะที่ closeButton เป็นคำนามและควรเห็นได้ชัดว่าเป็นชื่อของปุ่มที่เรียกใช้ฟังก์ชันปิด
CaffGeek

ใกล้เป็นคำคุณศัพท์เช่นclose = true;)
อาร์มันด์

13

ฉันจะใช้ตัวระบุที่อธิบายตัวแปรโดยไม่คำนึงถึงความยาว

กรณีของi, j และ kอยู่ในตัวของมันเองดังนั้นแพร่หลายพวกเขาอธิบายตัวเองโดยอัตโนมัติคุณรู้ว่าพวกมันเป็นดัชนีวนรอบ คุณสามารถพูดเช่นเดียวกันสำหรับ:

foreach loop (Strings s : myString)

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

ฉันจะเพิ่มและเสริมคำอย่างมีความสุขให้กับตัวระบุหากจำเป็นต้องอธิบายวัตถุประสงค์ของตัวแปร


3
BTW การใช้ i, j และ k สำหรับการวนลูปบ่งชี้ย้อนกลับไปมากกว่า 50 ปีสู่ FORTRAN ตัวแปรที่เริ่มต้นด้วยตัวอักษร I ถึง N เป็นค่าเริ่มต้นของประเภท INTEGER ตัวแปรที่เริ่มต้นด้วยตัวอักษรอื่น ๆ เป็นค่าเริ่มต้นจริง สิ่งนี้นำไปสู่การใช้ I, J และ K สำหรับดัชนีแบบวนซ้ำ (อนุสัญญาฟอร์แทรนอาจมาจากการใช้ตัวแปรเหล่านี้ที่ใช้ในสมการทางคณิตศาสตร์มาก่อน)
tcrosley

2
บทความที่สองที่ฉันเชื่อมโยงแสดงให้เห็นว่าตัวระบุที่สื่อความหมายยาวมากลดความสามารถในการทำความเข้าใจรหัสซึ่งขัดแย้งกับคำพูดของ "ผลข้างเคียงเชิงลบเท่านั้น"
Daniel C. Sobral

3
ผลข้างเคียงเชิงลบที่แท้จริงของตัวระบุที่ยาวมากนั้นคือความสามารถในการอ่าน เป็นการยากที่จะบอกได้อย่างรวดเร็วว่าตัวระบุที่ยาวมาก ๆ สองตัวนั้นเหมือนกันหรือแตกต่างกันและมันยากที่จะเลือกองค์ประกอบทั้งหมดของการแสดงออกด้วยตัวระบุที่ยาวมาก
David Thornley

tcrosley - ฉันจะเพิ่มที่เพียงเพราะมันมาจาก Fortran ไม่มีเหตุผลที่จะปฏิบัติเช่นนี้ต่อไป ฉันขอแนะนำให้ใช้ตัววนซ้ำ / วนซ้ำเรียกว่า "i", "j", "k" ฯลฯ มันเป็นความขี้เกียจทางปัญญาธรรมดา แพร่หลาย <> ดี
quick_now

9

พวกเขาไม่ได้เลวร้ายเหมือนตัวบ่งชี้ที่ทำให้เข้าใจผิด ฉันไม่สนใจรหัสการแก้จุดบกพร่องที่ตัวระบุเป็นเพียงจดหมายฉบับเดียว แต่ช่วงเวลาที่การตั้งชื่อที่แตกต่างกันเข้ามาในรูปภาพมันน่ารำคาญ ตัวอย่างเช่นหากคุณเห็นที่strPersonIDใดที่หนึ่งและที่อื่นที่คุณเห็นs_EmployeeIDแล้วมันก็สับสนที่จะบอกได้ว่าทั้งสองสายนี้มีอะไรบ้าง นอกจากนี้หากตัวแปรถูกคัดลอกวาง ( pmapIntString = new std::map<int,int>) และผิดทั้งหมดฉันจะกังวล

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


5

ฉันต่อสู้ ...

ฉันใช้เพื่อใช้ชื่อที่เป็นคำอธิบายเสมอ แต่ในตอนท้ายฉันใช้ตัวระบุที่สั้นมาก

ฉันคิดว่ามันขึ้นอยู่กับบริบทของรหัส:

  • หากคุณเขียนฟังก์ชันที่ซับซ้อน (อัลกอริธึม) คุณต้องใช้ตัวระบุสั้น ๆ เสมอ (อักขระเดียวดีที่สุด)
  • เมื่อเขียนค่าพารามิเตอร์สำหรับฟังก์ชั่นใช้ชื่อที่อธิบาย

ฉันเดาว่ามันขึ้นอยู่กับความหนาแน่นของรหัสด้วย บางครั้งการมีชื่อทำให้อ่านยากขึ้น

บางครั้งไม่มีชื่อเป็นความลับโดยสิ้นเชิง!


1
หากคุณกำลังเขียนอัลกอริธึมที่ซับซ้อนคุณจะไม่ต้องการให้ตัวระบุมีความหมายมากขึ้นสำหรับคนที่มองรหัสของคุณเป็นครั้งแรกหรือไม่?
Maxpm

ตัวระบุอักขระเดียวจะเหมาะสมเมื่อใด
อาเมียร์อัฟกานี

1
ฉันเคยคิดเช่นกัน แต่จริง ๆ แล้วฉันพบว่านี่ไม่ใช่กรณีลองด้วยตัวคุณเอง ใช้อัลกอริธึมที่ซับซ้อนและลองใช้ชื่อที่สื่อความหมายเทียบกับตัวแปรตัวอักษรเดี่ยว
Darknight

1
ฉันเห็นด้วย แต่สำหรับสูตรที่ซับซ้อนที่ยาวกว่าเท่านั้นเพราะพวกมันมักจะยาวเกินไปและถึงแม้ว่าคุณจะสามารถใช้ฟังก์ชั่น (ชื่อฟังก์ชัน) เพื่ออธิบายว่าส่วนใดของสูตรนั้น
Emile Vrijdags

1
ถ้ามันซับซ้อนและมีรูปแบบรูปแบบเหล่านั้นควรแบ่งออกเป็นฟังก์ชัน
CaffGeek

3

ความคิดของฉันคือพวกเขาไม่ได้เลวร้ายในตัวเอง แต่พวกเขาก็ไม่ได้คิดอะไรนอกจากว่าพวกเขาจะเป็นมาตรฐาน

ดังนั้นตัวแปรลูปคือi, jและkจึงเป็นมาตรฐานที่ไม่มีเหตุผลที่จะไม่ใช้มันหากคุณกำลังสร้างลูปที่จัดทำดัชนี

ที่อื่นที่ฉันจะใช้ตัวระบุที่สั้นมากคือเมื่อฉันประกาศตัวแปรชั่วคราวที่จะออกจากขอบเขตในไม่กี่บรรทัดเวลา - ตัวแปรชั่วคราวจากวง foreach ตัวอย่างเช่น หากไม่ได้รับการอ้างอิงถึงที่อื่นก็เป็นเรื่องง่ายสำหรับทุกคนที่อ่านรหัสเพื่อดูการประกาศและทำตามสิ่งที่มันถูกใช้ แม้ว่ามันจะถูกใช้มากกว่าห้าหรือหกบรรทัด แต่ฉันจะหาชื่อที่ชัดเจนกว่านี้

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


3

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


3

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

ชื่อตัวแปรที่สั้นมากจะเป็นประโยชน์เฉพาะถ้ามันมีประวัติที่ทำให้เข้าใจได้ (เช่นi, jและkดัชนี; dxสำหรับระยะทางพร้อมแกน) หรือขอบเขตที่เป็นพอขนาดเล็กสำหรับการอ้างอิงทั้งหมดจะมองเห็นได้ในครั้งเดียว (เช่น , temp) t47ที่เลวร้ายที่สุดชื่อตัวแปรในโลกเป็นสิ่งที่ต้องการ หมายความว่าอะไรและทำไมมันแตกต่างจากt46 ?") ขอบคุณพระเจ้าที่รูปแบบการตั้งชื่อส่วนใหญ่ออกมาพร้อมกับ FORTRAN แต่นี่เป็นสิ่งที่ความปรารถนาในการตั้งชื่อตัวแปรที่ยาวขึ้น

ตามที่เอกสารต้นฉบับของคุณแสดงชื่อที่ยาวเกินไปก็ยากที่จะอ่านเช่นกันเนื่องจากความแตกต่างที่ละเอียดอ่อนภายในพลาดได้เมื่อมองดูโค้ด (ความแตกต่างระหว่างDistanceBetweenXAxisAbscissae& & DistanceBetweenYAxisAbscissaeเป็นการยากที่จะรับอย่างรวดเร็ว)

ดังที่ NoteToSelf ชี้ให้เห็นก่อนหน้านี้ข้อกำหนดสำหรับความเป็นเอกลักษณ์ของชื่อขึ้นอยู่กับขอบเขตที่ชื่อต้องไม่ซ้ำกัน ดัชนีของลูป 5 บรรทัดสามารถi; ดัชนีของเรกคอร์ดที่ใช้งานที่ได้รับการส่งผ่านจากฟังก์ชั่นไปยังฟังก์ชั่นได้ดีกว่ามีชื่ออธิบาย

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


2

ในทางกลับกันฉันคิดว่าตัวระบุแบบยาวนั้นแย่กว่าตัวระบุแบบสั้น (เว้นแต่คุณจะติดต่อกับค่าคงที่) ใช้ทำให้รหัสของคุณมากขึ้นมีแนวโน้มที่จะเกิดข้อผิดพลาดกว่าการใช้ TheVariableThatHoldsTheCapacityOfMyContainerClassCapacity


1
คุณยินดีที่จะรู้ว่าหนึ่งในงานวิจัยที่ฉันเชื่อมโยงสนับสนุนการให้เหตุผลของคุณถ้าไม่ใช่ด้วยเหตุผลเดียวกัน ;-)
Daniel C. Sobral

1
นอกจากนี้ยังเป็นเรื่องง่ายที่จะเข้าใจตัวบ่งชี้ที่ยาวมาก ๆ อาจทำให้พวกเขาสับสนหรืออาจล้มเหลวที่จะรู้ว่าสองคนนั้นเหมือนกัน
David Thornley

2
TheVariableThatHoldsTheCapacityOfMyContainerClass ใหญ่กว่าที่ฉันคิดว่าเป็น "ยาว" - คำสิบคำยาวเกินไปสำหรับ CamelCase ที่จะช่วย; คุณต้องการช่องว่างเพื่อให้สามารถอ่านได้
Richard Gadsden

1
แน่นอน แต่นี่เป็นคนฟาง ตัวอย่างชื่อยาวของคุณเพิ่มคำฟุ่มเฟือย แต่ไม่มีข้อมูล พิจารณากรณีที่คุณมีตัวแปรหลายตัวที่เกี่ยวข้องกับรูปแบบความจุที่หลากหลาย จากนั้นคุณอาจต้องการชื่อที่แยกแยะวัตถุประสงค์เช่น initalCapacity หรือ finalCapacity
Charles E. Grant

2
@ Maxmac มีvar total = Capacity + Capacity2; อะไรCapacityและCapacity2มีอะไรบ้าง พวกเขาจะใช้อะไร? ต้องมองหาเบาะแสบริบทเสียเวลา ในขณะที่ถ้ามันเขียนตามที่var totalStorageCapacity = truckCapacity + trailerCapacity;ฉันรู้ว่าสิ่งที่เรากำลังพูดถึง
CaffGeek

2

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


+1 คุณพูดได้ดีมากฉันไม่สามารถหาคำพูดของฉันได้เมื่อฉันเขียนคำตอบ :-)
ComputerSaysNo

1

การสังเกตที่ฉันมีในช่วงหลายปีที่ผ่านมาและมันก็น้อยลงกว่าเมื่อ 10 หรือ 15 ปีก่อน โปรแกรมเมอร์ที่ไม่สามารถพิมพ์ได้นั้นเป็นคนที่จะต่อสู้กับคุณฟันและตอกย้ำการตั้งชื่อตัวแปร เป็นชื่อที่มีชื่อตัวแปรตัวอักษร 1-3 ตัว

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


2
จริง ๆ แล้วฉันไม่เห็นความสัมพันธ์ดังกล่าว หากมีสิ่งใดที่ดูเหมือนว่าผู้คนจากภาษา OO ใช้ตัวระบุแบบยาวและผู้คนจากภาษาที่ใช้งานได้จะเป็นตัวย่อ มันตั้งคำถามที่ข้อกล่าวหาว่า OO ช่วยในการสร้างแบบจำลอง :-)
Daniel C. Sobral

อย่าลืมว่าชื่อนั้นไม่เพียงพิมพ์ แต่ต้องอ่านเท่านั้น การใช้ตัวระบุที่ยาวเกินไปอาจลดความสามารถในการอ่านได้มาก การใช้สิ่งใดนอกจากiเป็นห่วงfor (int i=0; i<dst.size(); ++i) dst[i] += src[i]ควรเป็นสิ่งต้องห้ามตามกฎหมาย
maaartinus

1

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

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

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


โปรดทราบว่ารายงานฉบับที่สองระบุไว้อย่างชัดเจนว่า"แปดชื่อที่ใช้ในคำถามแปดข้อถูกดึงมาจากรหัสการผลิต" นอกจากนี้พวกเขาไม่ได้ทดสอบการท่องจำเพียงอย่างเดียว แต่เพื่อความถูกต้องเช่นกัน
Daniel C. Sobral

1

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

มันง่ายที่จะพูดว่า "ใคร ๆ ก็ควรจะเข้าใจว่า i, j และ k เป็นตัวแปรลูป" และส่วนใหญ่มันชัดเจนจริงๆ แต่ฉันยังคงพยายามถ่อมตนและเป็นมืออาชีพเกี่ยวกับเรื่องนี้และคิดว่ามันง่ายที่จะทำผิดพลาดเมื่อเขียนโปรแกรม ดังนั้นถ้าฉันวนลูปผ่านอาร์เรย์ของ Grobbles ฉันจะตั้งชื่อตัวแปรลูป grobbleIndex ฉันสามารถยอมรับว่าฉันเป็นตัวย่อของดัชนี เมื่อคุณใช้ ij และ k มันยากที่จะสังเกตเห็นข้อผิดพลาดเช่นการใช้ดัชนีที่ไม่ถูกต้องกับอาร์เรย์ที่ผิดและอื่น ๆ และยิ่งแย่ลงไปอีกเมื่อคุณมีลูปด้านใน

PS ในขณะที่ฉันเขียนคำตอบนี้ฉันกำลังเขียนจาวาสคริปต์ในแล็ปท็อปขนาดเล็ก 10 "ที่มีหน้าจอแบ่งเป็นแนวตั้งในกลุ่มและฉันยังคงใช้เวลาตั้งชื่อตัวแปรวงของฉัน rowIndex และ columnIndex


0

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


0

ฉันคิดว่าอุดมคติคือชื่อควรเป็นคำอธิบายเว้นแต่ ...

ความคิดที่ว่าชื่อ (อาจจะควรจะสั้นกว่า) และด้วยเหตุนี้จึงมีความหมายน้อยกว่า - หากพวกเขามีขอบเขตที่ จำกัด เพียงเหตุผลเดียวที่จะเบี่ยงเบนจากอุดมคติ

โดยส่วนตัวแล้วฉันมักจะใช้ชื่อสั้น ๆ สำหรับเอนทิตีที่อ้างอิงซ้ำ ๆ จำนวนเล็กน้อย ตัวอย่างรูทีนย่อยที่เรียกว่าแอปเฉพาะเช่น


-2

ฉันจะไม่ใช้ชื่อตัวระบุที่มีอักขระน้อยกว่า 4-5 ตัวตัวอย่างเช่นตัวแปร loop อาจเป็นดัชนีหรือ jIndex หรือ kIndex ขึ้นอยู่กับจำนวนลูปภายในที่ฉันต้องทำบางสิ่งบางอย่าง แต่สำหรับชื่ออื่นสมมติว่า "คีย์" ฉันจะใช้ "String LKey" หรือ "int LKey", "L" สำหรับโลคัลถ้ามันเป็นตัวแปรเมธอดหรือ "F" สำหรับตัวแปรคลาสส่วนตัวตัวระบุอื่น ๆ เช่นที่กล่าวถึงก่อนหน้านี้ฉันควรอธิบายเหตุผลของการมีอยู่ในชื่อของมันมิฉะนั้น ขอบเขต "ตัวระบุ" ไม่มีประโยชน์ใช่หรือไม่!


5
ข้อมูลเพิ่มเติมใดที่ "ดัชนี" บอกว่า "ฉัน" ไม่ได้? ชื่อตัวแปรแบบยาวที่ไม่บอกอะไรเลยจะเลวร้ายยิ่งไปกว่าชื่อตัวละครเดี่ยว
อานนท์

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