คำถามติดแท็ก naming-standards

17
มาตรฐานการเข้ารหัสเพื่อความชัดเจน: แสดงความคิดเห็นทุกบรรทัดของรหัส?
ฉันทำงานในร้านค้าที่ผลิตซอฟต์แวร์ที่สำคัญต่อชีวิตและฉันได้จัดการกับกฎการแสดงความคิดเห็นที่ตั้งใจจะให้โค้ดอ่านได้และอาจช่วยชีวิตผู้คนได้ จากประสบการณ์ของฉันแม้ว่าความต้องการจะกลายเป็นงานที่น่าเบื่อสมองที่ต้องทำเครื่องหมายในรายการตรวจสอบและไม่ช่วยให้ฉันจดจ่อกับการเขียนโค้ดที่เข้าใจได้ นอกจากนี้ยังเบี่ยงเบนความสนใจจากผู้ตรวจสอบเพียร์ของฉันจากการสนทนาที่มีความหมายกับฉันมากขึ้นเกี่ยวกับวิธีทำให้โค้ดง่ายต่อการเข้าใจ ฉันให้คะแนนรหัสนักเรียนที่ไม่มีความคิดเห็นและเห็นว่าเพราะเหตุใดพวกเขาจึงควรทำเครื่องหมายเพราะละเลยพวกเขา ฉันเข้าใจว่าการใช้ชื่อที่ดีโครงสร้างที่เรียบง่ายฟังก์ชั่นสั้น ๆ และโมดูลที่มุ่งเน้นจะทำให้โค้ดนั้นเข้าใจได้ง่ายพอที่จะลดความคิดเห็นได้ ฉันยังเข้าใจด้วยว่าความคิดเห็นควรอธิบายว่าทำไมรหัสทำในสิ่งที่มันทำไม่ได้อย่างไร ให้ทั้งหมดนี้เป็นไปได้ที่จะเขียนมาตรฐานการเข้ารหัสที่ดีที่จับความคิดนี้ คนที่จะมีความเกี่ยวข้องในการตรวจสอบโดยเพื่อน แต่จะไม่เปลี่ยนเป็นรายการตรวจสอบที่ไม่สนใจซึ่งทำให้โน้ตไม่เป็นประโยชน์มากกว่า: "คุณลืมแสดงความคิดเห็นในบรรทัดที่ 42" ตัวอย่างประเภทของรหัสกฎนี้อาจต้องใช้เมื่อถือว่าเป็นบรรทัดในรายการตรวจสอบ: /* Display an error message */ function display_error_message( $error_message ) { /* Display the error message */ echo $error_message; /* Exit the application */ exit(); } /* -------------------------------------------------------------------- */ /* Check if the configuration file does …

2
รูปแบบการตั้งชื่อไฟล์ Python?
ฉันเคยเห็นส่วนนี้ของ PEP-8 https://www.python.org/dev/peps/pep-0008/#package-and-module-names ฉันยังไม่ชัดเจนว่านี่หมายถึงชื่อไฟล์ของโมดูล / คลาส / แพ็คเกจหรือไม่ หากฉันมีตัวอย่างหนึ่งของชื่อไฟล์ควรเป็นตัวพิมพ์เล็กทั้งหมดที่มีขีดล่างถ้าเหมาะสมหรือไม่ หรืออย่างอื่น?

8
ปัญหาการตั้งชื่อ: ควรเปลี่ยนชื่อ“ ISomething” เป็น“ Something” หรือไม่ [ปิด]
บทของลุงบ็อบเกี่ยวกับชื่อในClean Codeแนะนำให้คุณหลีกเลี่ยงการเข้ารหัสในชื่อส่วนใหญ่เกี่ยวกับสัญกรณ์ฮังการี เขายังกล่าวถึงการลบIคำนำหน้าจากอินเทอร์เฟซโดยเฉพาะ แต่ไม่แสดงตัวอย่างของสิ่งนี้ สมมติว่า: การใช้อินเตอร์เฟสเป็นส่วนใหญ่เพื่อให้สามารถทดสอบได้ผ่านการฉีดแบบพึ่งพา ในหลายกรณีสิ่งนี้นำไปสู่การมีอินเทอร์เฟซเดียวกับตัวดำเนินการเดียว ยกตัวอย่างเช่นสองคนนี้ควรตั้งชื่ออะไร ParserและConcreteParser? ParserและParserImplementation? public interface IParser { string Parse(string content); string Parse(FileInfo path); } public class Parser : IParser { // Implementations } หรือฉันควรเพิกเฉยต่อข้อเสนอแนะนี้ในกรณีการดำเนินการแบบครั้งเดียวเช่นนี้หรือไม่?

1
อนุสัญญาการตั้งชื่อโปรโตคอล Swift [ปิด]
มาจากพื้นหลังส่วนใหญ่ c # ฉันเคยใช้คำว่า "อินเตอร์เฟส" สำหรับการอธิบายวัตถุที่ไม่มีการใช้งานที่กำหนดพฤติกรรม ใน c # การประชุมคือการเพิ่มชื่อส่วนต่อประสานด้วย "I" เช่นในIEnumerableเป็นต้น แน่นอนว่าแนวคิดนี้มีชื่อแตกต่างกันในภาษาต่างๆ ใน Swift แนวคิดเดียวกันนี้เรียกว่า "โปรโตคอล" เมื่อฉันพัฒนาโปรโตคอลฉันมักจะมีชื่อคล้ายกันมากสำหรับโปรโตคอลและคลาสที่ใช้งานมัน จนถึงตอนนี้ฉันได้ต่อท้ายคำว่า "โปรโตคอล" กับวัตถุเหล่านี้ในลักษณะเดียวกับที่ฉันใช้ "I" ใน c #, ในEnumerableProtocol, ฯลฯ มีความคิดเห็นเกี่ยวกับการตั้งชื่อโปรโตคอลสำหรับโพรโทคอลอย่างรวดเร็วหรือไม่?


9
วิธีตั้งชื่อเมธอดที่ทั้งสองทำงานและส่งคืนบูลีนเป็นสถานะได้อย่างไร?
หากมีวิธีการ bool DoStuff() { try { // doing stuff... return true; } catch (SomeSpecificException ex) { return false; } } มันควรจะถูกเรียกว่าค่อนข้างIsStuffDone()? ผู้ใช้ทั้งสองชื่ออาจตีความผิด: หากชื่อเป็นDoStuff()สาเหตุว่าทำไมจึงส่งคืนบูลีน หากชื่อIsStuffDone()ไม่ชัดเจนว่าวิธีการทำงานหรือตรวจสอบผลของมันเท่านั้น มีแบบแผนสำหรับกรณีนี้หรือไม่? หรือวิธีการอื่นเป็นวิธีนี้ถือว่ามีข้อบกพร่อง? ยกตัวอย่างเช่นในภาษาที่มีพารามิเตอร์ที่ส่งออกเช่น C # voidตัวแปรสถานะบูลีนอาจจะส่งผ่านไปยังวิธีการที่เป็นหนึ่งและประเภทผลตอบแทนของวิธีการที่จะเป็น แก้ไข: ในการจัดการข้อยกเว้นปัญหาเฉพาะของฉันไม่สามารถมอบหมายโดยตรงไปยังผู้โทรเพราะวิธีการเป็นส่วนหนึ่งของการใช้อินเตอร์เฟซ ดังนั้นผู้เรียกไม่สามารถเรียกเก็บเงินกับการจัดการกับข้อยกเว้นทั้งหมดของการใช้งานที่แตกต่างกัน ไม่คุ้นเคยกับข้อยกเว้นเหล่านั้น แต่โทรสามารถจัดการกับข้อยกเว้นที่กำหนดเองเช่นStuffHasNotBeenDoneForSomeReasonExceptionเป็นได้รับการแนะนำในคำตอบของ npinti และแสดงความคิดเห็น

3
Readme.txt vs. README.txt
ฉันเพิ่งแยกโครงการใน Github ทำการเปลี่ยนแปลง ฯลฯ ฉันสงสัยว่า: ฉันเห็น README.txt ส่วนใหญ่ในโครงการโอเพนซอร์สและไฟล์ที่ฉันแก้ไขคือ Readme.txt นี่เป็นรูปแบบของการจัดเรียงบางส่วนหรือฉันควรจะทิ้งมันไว้อย่างนั้นหรือ

2
เหตุใดซอฟต์แวร์จึงใช้ชื่อ Win32
หากซอฟต์แวร์ / ห้องสมุดมีการสนับสนุนบางอย่างสำหรับแพลตฟอร์ม Windows win32พวกเขามักจะตั้งชื่อไดเรกทอรีและตัวแปรของพวกเขาเป็น นี่เป็นที่แพร่หลายมากที่สุดในโครงการ C / C ++ แม้MinGWwin32โครงการเป้าหมายการใช้สาม มีเหตุผลสำหรับสิ่งนี้หรือไม่? ทำไมไม่ใช้ชื่อที่เหมาะสมเช่น Windows หรือ Microsoft Windows มีอุปสรรค์ทางกฎหมายรอบตัวเลือกการตั้งชื่อหรือไม่ คำถามนี้ไม่เกี่ยวกับ API แต่ใช้หลักการตั้งชื่อ เมื่อห้องสมุดสนับสนุนระบบปฏิบัติการอื่น ๆ ที่พวกเขามักจะใช้ชื่อที่เหมาะสมเช่นlinux, freebsdหรืออะไรก็ตามที่สนับสนุนพิเศษที่จำเป็น แต่เมื่อพูดถึง Windows มักจะมีคำย่อwin32ที่ดูแปลก ๆ เมื่อเทียบกับที่เหลือ

2
ทำไม XMLHttpRequest ดูเหมือนจะไม่ปฏิบัติตามหลักการตั้งชื่อ
ฉันได้ทำงานกับวัตถุXMLHttpRequestใน JavaScript เมื่อเร็ว ๆ นี้และฉันอดไม่ได้ที่จะสังเกตว่าการใส่ชื่อนี้ไม่สมเหตุสมผล ทำไม 'XML' ทั้งหมดอยู่ในตัวพิมพ์ใหญ่ในขณะที่ 'Http' ไม่ถูกต้อง พวกเขาเป็นทั้งตัวย่อ! แน่นอนว่ามันสมเหตุสมผลกว่าสำหรับชื่อที่จะเป็นอย่างใดอย่างหนึ่งต่อไปนี้: XMLHttpRequest (PascalCase การปฏิบัติที่ดีที่สุดสำหรับชื่อชั้นใน JavaScript) xmlHttpRequest (camelCase ก็เหมือนกัน แต่ไม่ใช่สำหรับคลาส) XMLHTTPRequest (ตัวย่อสำหรับตัวย่อซึ่งไม่ค่อยใช้ในการเขียนโปรแกรม?) ฉันแน่ใจว่าจะต้องมีเหตุผลบางอย่างและฉันเกลียดที่จะคิดว่าตอนนี้มันเป็นหินเพราะไม่มีใครถามเรื่องนี้ในเวลา มีแบบแผนการตั้งชื่ออื่นที่ฉันไม่ทราบหรือไม่?

2
ทำไมการประชุมบอกว่าชื่อตาราง DB ควรเป็นเอกเทศ แต่เป็นพหูพจน์ของทรัพยากร
มันเป็นแบบแผนที่ค่อนข้างกำหนดไว้ว่าอย่างน้อยชื่อตารางฐานข้อมูลใน SQL ควรเป็นแบบเอกพจน์ SELECT * FROM user;ดูคำถามและการอภิปรายนี้ นอกจากนี้ยังมีการประชุมที่ค่อนข้างดีที่ชื่อทรัพยากร RESTful API ควรเป็นพหูพจน์ GET /users/123และPOST /usersดูคนนี้ ใน API ที่ได้รับการสนับสนุนฐานข้อมูลที่ง่ายที่สุดชื่อของทรัพยากรใน URL จะเป็นตารางและองค์ประกอบข้อมูลใน URL และหน่วยงานร้องขอ / ตอบสนองจะจับคู่กับคอลัมน์ในฐานข้อมูลโดยตรง ตามแนวคิดแล้วฉันไม่เห็นความแตกต่างระหว่างการทำงานกับข้อมูลผ่าน API เชิงทฤษฎีนี้กับการทำงานบน SQL โดยตรง และด้วยเหตุนี้ความแตกต่างในการตั้งชื่อข้อตกลงระหว่างuserและusersไม่สมเหตุสมผลกับฉัน ความแตกต่างในการทำให้เป็นพหูพจน์เป็นอย่างไรเมื่อแนวคิด REST API และ SQL กำลังทำสิ่งเดียวกัน

6
ปรัชญา / การใช้เหตุผลเบื้องหลังชื่อวิธีการปาสคาลของ C # คืออะไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันเพิ่งเริ่มเรียนรู้ C # มาจากพื้นหลังใน Java, C ++ และ Objective-C ฉันพบ Pascal-casing ของ method-ชื่อค่อนข้างไม่ซ้ำใครและตาดยากที่จะคุ้นเคยในตอนแรก อะไรคือเหตุผลและปรัชญาที่อยู่เบื้องหลังสิ่งนี้? ฉันเดาว่าเป็นเพราะคุณสมบัติ C # ไม่เหมือนกับใน Objective-C โดยที่ชื่อเมธอดสามารถเหมือนกับตัวแปรอินสแตนซ์ได้ทุกกรณีนี่ไม่ใช่กรณีที่มี C # ฉันเดาว่าหนึ่งในเป้าหมายที่มีคุณสมบัติ (เช่นเดียวกับภาษาส่วนใหญ่ที่สนับสนุน) คือการทำให้คุณสมบัติไม่สามารถแยกแยะได้อย่างแท้จริงจากตัวแปรและวิธีการ ดังนั้นหนึ่งสามารถมี "int x" ใน C # และคุณสมบัติที่สอดคล้องกันกลายเป็น X เพื่อให้แน่ใจว่าคุณสมบัติและวิธีการจะแยกไม่ออกชื่อวิธีการทั้งหมดที่ฉันคาดเดาดังนั้นจึงคาดว่าจะเริ่มต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ (นี่เป็นเพียงสมมติฐานของฉันตามสิ่งที่ฉันรู้เกี่ยวกับภาษา C # - ฉันยังคงเรียนรู้อยู่) …

3
ชื่อวิธีการที่“ บวก” และ“ ลบ” เหมาะสมหรือไม่
Java SE 8 มาพร้อมกับกลไกใหม่สำหรับวันที่แนะนำLocalDate, LocalTimeและLocalDateTimeชั้นเรียนเพื่อเป็นตัวแทนของจังหวะเวลา เพื่อจัดการกับจังหวะดังกล่าวเป็นชุดของวิธีการที่จะได้รับ: LocalDate.plusDays(...), LocalDate.minusDays(...)และอื่น ๆ ฉันคิดเสมอว่าวิธีปฏิบัติที่ดีคือการตั้งชื่อวิธีการหลังจากคำกริยาอธิบายถึงจุดประสงค์ของพวกเขาเช่นเดียวกับวิธีการที่เป็นจริงการดำเนินการที่จะดำเนินการสิ่งที่จะดำเนินการ เพียงแค่พูดถึงถ้าคุณพิจารณาการเรียนเหมือนStringBuilderเช่นชื่อวิธีการมีappend, insert, delete... นี่คือเหตุผลที่ฉันก็ไม่ได้เสียงที่เหมาะสมในการตั้งชื่อวิธีการplusDaysแทนsumDays, แทนminusDays subtractDaysฉันแค่พบว่ามันน่ารำคาญมาก? คุณคิดอย่างไร? เหตุผลเดียวที่ฉันนึกได้ก็คือวันที่นั้นเป็นวัตถุที่ไม่เปลี่ยนรูปดังนั้นโดยการโทรplusDaysคุณไม่ได้เพิ่มวันในวัตถุดั้งเดิม แต่สร้างวันใหม่ด้วยคุณสมบัติใหม่ แต่นั่นช่างลึกซึ้งมาก

2
ข้อกำหนดการตั้งชื่อสำหรับคลาส Java ที่มีเมธอด main static หรือไม่?
หลังจากอ่านคำตอบของ gnatไปที่ทำไมวิธีหลักแบบคงที่ใน Java และ C # แทนที่จะเป็นตัวสร้าง? ฉันใช้คำตอบของเขาเพื่อหมายความว่าจุดประสงค์ของคลาส Java ที่มีเมธอด main static คือเพื่อdefine a program entry pointและไม่ได้หมายความว่าเป็นโปรแกรมเอง อาจมีวิธีที่ดีกว่าในการทำเช่นนี้ แต่ฉันมักจะมีชั้นเรียนที่มีวิธีหลักแบบคงที่เพื่อทำสิ่งที่ง่ายเช่นนี้ public class MenuLauncher { public static void main(String[] args) { Menu menu = new Menu(); menu.run(); } } โค้ดด้านบนจะเป็นแนวปฏิบัติที่ดีที่สุดสำหรับ OOP หรือไม่หากคลาสที่มีสแตติกหลักไม่ได้ทำอะไรมากไปกว่าการเริ่มต้นหรือเริ่มโปรแกรมตรรกะภายในวัตถุที่ไม่คงที่แยกต่างหาก หลังจากทั้งหมดหลักเป็นแบบคงที่ดังนั้นชั้น MenuLauncher จะไม่ถูก จำกัด มาก? เนื่องจาก main เป็นจุดเริ่มต้นฉันไม่เห็นจุดประสงค์อื่นใดสำหรับชั้นเรียนอื่นที่ไม่ใช่จุดเข้า มีแบบแผนการตั้งชื่อ Java …

1
มาตรฐานในการจัดการกับ pluralia tantum ในรหัสของคุณคืออะไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เมื่อใช้ตัวแปรที่มีพหูพจน์และเอกพจน์เหมือนกันคุณจะตั้งชื่อพวกเขาอย่างไร มีมาตรฐานออกมาบ้างไหม? ตัวอย่างเช่น: Series[] series // Plural Series series // Singular ลึก: หากต้องการเจาะจงชุดของฉันจะต้องเรียกว่าชุด (เนื่องจากการจัดรูปแบบ JSON) คุณจะพิจารณาตั้งชื่อรูปแบบเอกพจน์ของซีรี่ส์ที่เพิ่มเข้าไปในคอลเลกชันSeries sหรือไม่ ในขณะที่: List<Series> series = new List<Series>(); Series s; while (someBool) { s = new Series(); s.Name = "Name"; while (anotherBool) { s.AddValue(someValue); } series.Add(s); }

7
แนวคิดในการตั้งชื่อคลาสที่มีคำต่อท้าย“ ข้อมูล” เช่น:“ SomeClass” และ“ SomeClassInfo” คืออะไร
ฉันกำลังทำงานในโปรเจ็กต์ที่เกี่ยวข้องกับอุปกรณ์ทางกายภาพและฉันสับสนว่าจะตั้งชื่อคลาสบางคลาสในโครงการนี้ได้อย่างไร เมื่อพิจารณาถึงอุปกรณ์จริง (เซ็นเซอร์และตัวรับสัญญาณ) เป็นสิ่งหนึ่งและการเป็นตัวแทนของพวกเขาในซอฟต์แวร์นั้นเป็นอีกสิ่งหนึ่ง ตัวอย่างเช่นในขณะที่Sensorคลาสจะเป็นตัวแทนของเซ็นเซอร์จริง (เมื่อเชื่อมต่อกับอุปกรณ์ที่ใช้งานจริง) SensorInfoจะถูกใช้เพื่อแสดงเฉพาะคุณสมบัติของเซ็นเซอร์ดังกล่าว ตัวอย่างเช่นเมื่อบันทึกไฟล์ฉันจะทำให้เป็น a SensorInfoถึงส่วนหัวของไฟล์แทนการทำให้เป็นอันดับ a Sensorซึ่งเรียงลำดับของจะไม่ทำให้รู้สึก แต่ตอนนี้ฉันสับสนเพราะมีวงจรกลางในวงจรชีวิตของวัตถุที่ฉันไม่สามารถตัดสินใจได้ว่าฉันควรใช้อย่างใดอย่างหนึ่งหรืออื่นหรือวิธีการได้รับอย่างใดอย่างหนึ่งหรือแม้กระทั่งว่าตัวแปรทั้งสองควรจะยุบลงในชั้นเดียวเท่านั้น นอกจากนี้Employeeคลาสตัวอย่างที่ธรรมดาเกินไปก็ชัดเจนว่าเป็นเพียงตัวแทนของบุคคลจริง แต่ไม่มีใครแนะนำให้ตั้งชื่อชั้นเรียนEmployeeInfoแทนเท่าที่ฉันรู้ ภาษาที่ฉันทำงานด้วยคือ. NET และรูปแบบการตั้งชื่อนี้ดูเหมือนจะเป็นเรื่องทั่วไปตลอดทั้งเฟรมเวิร์กสำหรับตัวอย่างของคลาสเหล่านี้: DirectoryและDirectoryInfoชั้นเรียน FileและFileInfoชั้นเรียน ConnectionInfoชั้นเรียน (ไม่มีConnectionชั้นเรียนผู้สื่อข่าว); DeviceInfoชั้นเรียน (ไม่มีDeviceชั้นเรียนผู้สื่อข่าว); ดังนั้นคำถามของฉันคือ: มีเหตุผลทั่วไปเกี่ยวกับการใช้รูปแบบการตั้งชื่อนี้หรือไม่? มีกรณีที่เหมาะสมหรือไม่ที่จะมีชื่อคู่ ( ThingและThingInfo) และกรณีอื่น ๆ ที่ควรมีอยู่เฉพาะThingInfoคลาสหรือThingคลาสโดยไม่มีคู่

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