แนวทางการตั้งชื่อการประชุมมีมูลค่าการดูแลเกี่ยวกับ?


13

ฉันตั้งชื่อตัวแปรของฉันโดยใช้ระเบียบ. Net:

  • camelCase สำหรับตัวแปรและฟิลด์ (ฉันมักจะใช้ _camelCase สำหรับฟิลด์ส่วนตัวในคลาส)
  • PascalCase สำหรับเมธอดคุณสมบัติและคลาส

ที่เดียวที่ฉันเบี่ยงเบนคือค่าคงที่และ Enums ที่ฉันชอบสไตล์ Java SCREAMING_CAPS

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

  • s หรือ str สำหรับ Strings
  • ฉันหรือ int สำหรับ Ints
  • d สำหรับทศนิยม (หรือบางครั้งสองครั้ง)
  • o หรือ obj สำหรับวัตถุชนิดใด ๆ

ฉันประจบประแจงเมื่อใดก็ตามที่ฉันเห็นรูปแบบรหัสที่ใช้ในรหัสของคนอื่น (แม้แต่ในรหัสกรีนฟิลด์ไม่ใช่แค่ cruft ดั้งเดิม) และฉันปฏิเสธที่จะใช้สไตล์นั้น ฉันได้นำมาตรฐานในการตั้งชื่อ. Net มาใช้ในอดีตและมันก็เพิกเฉยคนที่เขียนในสัญกรณ์ฮังการียังคงทำเช่นนั้นพวกเราที่ไม่ชอบให้ฉันใช้สไตล์ของตัวเองต่อไป ฉันกลัวนิดหน่อยว่าถ้าเราทำมาตรฐาน (ซึ่งฉันพยายามผลักดันไปเรื่อย ๆ แต่ดูเหมือนว่าไม่มีใครสนใจ) มันจะเป็นรูปแบบของฮังการีและไม่ใช่วิธีที่แนะนำแล้วฉันจะถูกบังคับให้เขียนรหัสเช่นนั้น .

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


2
คำถามที่ดี. มีการตั้งชื่ออนุสัญญาเพื่อช่วยไม่ให้ขัดขวาง เมื่อพวกเขาขัดขวาง (เพราะจุดประสงค์ดั้งเดิมของพวกเขาไม่เกี่ยวข้องอีกต่อไป) จากนั้นทิ้งพวกเขา
Gary Rowe

คำตอบ:


7

สิ่งเดียวที่คุณควรใส่ใจคือคุณกำลังทำงานในทีมที่ผู้คนไม่ใส่ใจกับการทำความสะอาดสิ่งต่าง ๆ เล็กน้อย มันเศร้ามาก

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

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


+1 การเปลี่ยนชื่อ Refactor วันนี้มีประสิทธิภาพมากจนคุณแทบจะไม่สังเกตเห็นผลกระทบของการเปลี่ยนแปลง
Gary Rowe

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

3

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

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


4
ฉันไม่สนใจแม้แต่คำนำหน้า "ฉัน" และใช้มันเพียงเพราะหลีกเลี่ยงปัญหาเรื่อง Java กล่าวชื่อCustomerRepositoryผู้ใช้ที่ถูกเชื่อมต่อและชั้นเรียนCustomerRepositoryImplหรือคล้ายกัน
Wayne Molina

3
+1 - ดูเหมือนว่าควรมีวิธีที่ดีกว่า ฉันใช้ "Hungarian Light" เป็นครั้งคราว แต่คำนำหน้านั้นสัมพันธ์กับธุรกิจเสมอไม่ใช่ประเภทที่เกี่ยวข้อง ตัวอย่างเช่นทุกอย่างในการบัญชีมี AP และด้าน AR และพวกเขามักจะมีชื่อเดียวกันเช่นใบแจ้งหนี้ การมี ARInvoice และ APInvoice นั้นสมเหตุสมผลดีสำหรับฉัน ชาวฮังการีไม่ได้เลวร้ายตลอดเวลา
Morgan Herlocker

@Wayne M คุณอาจต้องการดูprogrammers.stackexchange.com/questions/75956/…
Gary Rowe

ฉันไม่ได้จริงๆพิจารณาว่า "สัญกรณ์ฮังการี" เพราะที่คุณกล่าวว่ามันเป็นธุรกิจที่มีความหมายกับย่อที่ดีที่กำหนดว่าคนที่รู้, ตามสายเดียวของการมีรหัสที่ใช้ XML นำหน้าด้วยแทนXml ExtensibleMarkupLanguageในโมดูลการบัญชีฉันคาดว่าจะเห็นวัตถุใบแจ้งหนี้ที่ชอบarInvoiceและapInvoiceนำเสนอบริบททางธุรกิจ แต่เห็นobjArInvoiceหรือoApInvoiceเป็นเพียง IMO โง่ ฉันเดาว่ามันอาจจะแย่กว่านั้นอาจเป็นชื่อคลาสclsApInvoiceจริง
Wayne Molina

1
@ironcode: จริงๆแล้วสิ่งที่เรียกว่า Apps Hungarian สัญกรณ์เทียบกับ System Hungation Notation และดีขึ้นมาก คนส่วนใหญ่ใช้ระบบอย่างน่าเสียดาย en.wikipedia.org/wiki/…
Miki Watts

2

อาร์กิวเมนต์ที่ดีที่สุดสำหรับสัญกรณ์ฮังการีข้าง IDEs สมัยใหม่ซึ่งมีวิธีการมากมายในการแสดงประเภทการมองเห็นและสิ่งอื่น ๆ ของตัวแปรที่มีสีพร้อมสัญลักษณ์เล็ก ๆ

  • ส่งเสริมการบิดเบือนมากขึ้น (b) ool (f) loat (c) har (l) ong (s) hort (ขัดแย้งกับ String? no: (S) tring), (v) oid
  • ส่งเสริมการเข้ารหัสทัศนวิสัย ฉันมาจาก Javaland และหวังว่ามันจะเหมาะกับ. net เช่นกัน: (pri) vate, (pub) blic, (pro) tected (def) ault ควรได้รับประโยชน์
  • .net มี final / const หรือไม่ ทำให้เป็นคำนำหน้า! ฉันได้ยิน 'ระเหย' หรือไม่
  • ทำไม int และ long ต้องการคำนำหน้า แต่วัตถุต่างกันไม่ นั่นไม่ใช่เหตุผล สร้างตัวย่อ ที่ซึ่ง Object ใหม่ทุกตัวจะมีตัวย่อที่แตกต่างกัน
  • ตัวแปรที่อาจเป็นโมฆะและสิ่งที่ไม่ควรเป็นโมฆะสามารถนำหน้าได้เช่นกัน คนฉลาดทำให้ DbC ทั้งหมดลงในคำนำหน้าของตัวแปร

อย่างจริงจัง: ในการ refactoring คุณอาจเปลี่ยนตัวแปรจาก int เป็น long จาก String เป็น char คุณไม่จำเป็นต้องเปลี่ยนชื่อด้วย

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

อักขระเพิ่มเติมรบกวนความหมายของตัวแปร จำนวนเต็ม 'sane' รับ 'i_sane' ซึ่งดูเหมือน 'insane' มากขึ้น

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

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


น่าเศร้าที่ฉันเคยเห็นeSomeEnumใช้ในสถานที่เช่นกัน ขอบคุณไม่บ่อย
Wayne Molina

2

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


1

ในบางประเด็นนี่เป็นปัญหาส่วนตัวและเป็นหนึ่งในการเขียนโปรแกรม minutae (การสะกดคำ?) ที่ฉันให้ความบันเทิงสักพักหนึ่งแล้วหลีกเลี่ยง ในขณะที่ฉันคิดว่าสัญกรณ์ฮังการีเป็นบาปที่ควรถูกเนรเทศ แต่ฉันคิดว่าความมั่นคงนั้นสำคัญกว่า

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

ฉันไม่ชอบมาตรฐานที่บังคับใช้โดยกลุ่มมาตรฐาน แต่ทีมซอฟต์แวร์นั้นพัฒนามาตรฐานของตนเองและที่สำคัญกว่านั้นคือ


1

ด้วยการเปลี่ยนชื่อตัวแปร resharper นั้นเร็วมากจนฉันสามารถยกเลิกการพิจารณาแบบแผนการตั้งชื่อได้อย่างรวดเร็วจนฉันไม่ต้องออกจากการประชุมแบบเก่า ๆ

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


0

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


0

การเบี่ยงเบนของฉัน:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • privateFunction
  • param_
  • ปุ่มส่วนตัว okBU; // ฯลฯ จำกัด 3 ตัวอักษร
  • struct SOMESTRUCT // สำหรับ pinvoke structs

รหัสภูมิภาคทั่วไปและรูปแบบไฟล์:

  • สมาชิก
    • (ส่วนตัว | ภายใน | ได้รับการป้องกัน | สาธารณะ) X [คงที่] X [const / อ่านได้อย่างเดียว]
  • คุณสมบัติ
    • (ส่วนตัว | ภายใน | ได้รับการป้องกัน | สาธารณะ) X [คงที่] X [อ่านอย่างเดียว]
  • ก่อสร้าง
    • (ส่วนตัว | ภายใน | ได้รับการป้องกัน | สาธารณะ) X [คงที่]
  • คำสั่ง // อะไรก็ได้ที่มี void return หรือ return status
    • (สาธารณะ | ป้องกัน | ภายใน | ส่วนตัว) X [คงที่]
  • ตัวจัดการเหตุการณ์ / ส่วนตัว /
    • (การควบคุม | ระยะไกล | บริการ | อื่น ๆ ) เหตุการณ์
  • ฟังก์ชั่น // สอบถามสถานะไม่ควรมีผลข้างเคียง
    • (สาธารณะ | ป้องกัน | ภายใน | ส่วนตัว) X [คงที่]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.