คำถามติดแท็ก coding-style

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

7
ใช้จำนวนเต็มไม่ได้ลงนามใน C และ C ++
ฉันมีคำถามง่าย ๆ ที่ทำให้ฉันงุนงงมานาน ฉันกำลังจัดการกับเครือข่ายและฐานข้อมูลดังนั้นข้อมูลจำนวนมากที่ฉันกำลังเผชิญอยู่คือเคาน์เตอร์ 32- บิตและ 64- บิต (ไม่ได้ลงนาม), id รหัส 32- บิตและ 64- บิต (ยังไม่มีแผนที่ที่มีความหมายสำหรับการลงชื่อเข้าใช้) ฉันไม่เคยจัดการกับคำศัพท์จริงใด ๆ ที่สามารถแสดงเป็นจำนวนลบได้ ฉันและเพื่อนร่วมงานของฉันมักใช้ประเภทที่ไม่ได้ลงนามเช่นuint32_tและuint64_tสำหรับเรื่องเหล่านี้และเพราะมันเกิดขึ้นบ่อยครั้งเราจึงใช้พวกเขาสำหรับดัชนีแถวลำดับและการใช้จำนวนเต็มทั่วไปอื่น ๆ ในขณะเดียวกันคู่มือการเข้ารหัสต่างๆที่ฉันกำลังอ่าน (เช่น Google) ไม่สนับสนุนการใช้ประเภทจำนวนเต็มที่ไม่ได้ลงชื่อและเท่าที่ฉันทราบว่า Java หรือ Scala ไม่มีประเภทจำนวนเต็มที่ไม่ได้ลงนาม ดังนั้นฉันไม่สามารถหาสิ่งที่ถูกต้องได้: การใช้ค่าที่มีการเซ็นชื่อในสภาพแวดล้อมของเราจะไม่สะดวกมากในเวลาเดียวกันในขณะเดียวกันแนวทางการเข้ารหัสเพื่อยืนยันในการทำสิ่งนี้
23 c  coding-style 

5
การฟอร์แมตและการควบคุมเวอร์ชัน
เรื่องการจัดรูปแบบรหัส แม้เรื่องการเยื้อง และความมั่นคงมีความสำคัญมากกว่าการปรับปรุงเล็กน้อย แต่โครงการมักจะไม่มีคู่มือสไตล์ชัดเจนชัดเจนตรวจสอบได้และบังคับใช้ตั้งแต่วันที่ 1 และการปรับปรุงที่สำคัญอาจมาถึงทุกวัน บางทีคุณอาจพบว่า SELECT id, name, address FROM persons JOIN addresses ON persons.id = addresses.person_id; อาจเขียนได้ดีกว่า / เขียนได้ดีกว่า SELECT persons.id, persons.name, addresses.address FROM persons JOIN addresses ON persons.id = addresses.person_id; ในขณะที่ทำงานเพื่อเพิ่มคอลัมน์เพิ่มเติมในแบบสอบถาม บางทีนี่อาจเป็นคำถามที่ซับซ้อนที่สุดในทั้งสี่ข้อความในรหัสของคุณหรือข้อความค้นหาเล็กน้อยในหมู่คนนับพัน ไม่ว่าการเปลี่ยนแปลงจะทำได้ยากเพียงใดคุณตัดสินใจได้ว่ามันคุ้มค่า แต่คุณจะติดตามการเปลี่ยนแปลงของรหัสในการเปลี่ยนแปลงการจัดรูปแบบที่สำคัญได้อย่างไร คุณเพียงแค่ยอมแพ้และพูดว่า "นี่คือจุดที่เราเริ่มต้นอีกครั้ง" หรือคุณสามารถฟอร์แมตแบบสอบถามทั้งหมดในประวัติพื้นที่เก็บข้อมูลทั้งหมด หากคุณใช้ระบบควบคุมเวอร์ชันแบบกระจายเช่น Git คุณสามารถย้อนกลับไปสู่การคอมมิทครั้งแรกและฟอร์แมตใหม่จากที่นี่ไปเป็นสถานะปัจจุบัน แต่มันเป็นงานจำนวนมากและทุกคนจะต้องหยุดทำงานชั่วคราว (หรือเตรียมพร้อมสำหรับแม่ของการรวมทั้งหมด) ในขณะที่มันกำลังดำเนินอยู่ มีวิธีที่ดีกว่าในการเปลี่ยนประวัติศาสตร์ซึ่งให้ผลลัพธ์ที่ดีที่สุด: สไตล์เดียวกันในทุกการกระทำ ผสานงานน้อยที่สุด …

6
ประโยชน์ของชื่อพารามิเตอร์ฟังก์ชันคำนำหน้าด้วย p * คืออะไร
ฉันมักจะเห็นโครงการ (ในโครงการ Java และทีมงานใช้ Eclipse) pที่พารามิเตอร์ฟังก์ชั่นที่มีคำนำหน้า ตัวอย่างเช่น public void filter (Result pResult) ... โดยส่วนตัวฉันไม่เห็นประโยชน์ใด ๆ ในเรื่องนี้ แต่ต้องการทราบว่าการให้เหตุผลคืออะไร คำอธิบายที่ดีที่สุดที่ฉันเคยได้ยินคือการแยกชื่อของฟิลด์ที่มีชื่อเหมือนกันฉันมีปัญหากับคำอธิบายนั้น แต่ฉันสามารถเข้าใจประเด็นได้

10
ประเภท nullable จะดีกว่าตัวเลขมายากล?
ฉันมีการถกเถียงกันเล็กน้อยกับเพื่อนร่วมงานเมื่อเร็ว ๆ นี้ เราใช้ C # โดยเฉพาะ แต่สิ่งนี้สามารถนำไปใช้กับภาษาใด ๆ ที่มีประเภท nullable พูดเช่นคุณมีค่าที่แสดงถึงสูงสุด อย่างไรก็ตามค่าสูงสุดนี้เป็นทางเลือก ฉันยืนยันว่าเป็นจำนวนโมฆะจะดีกว่า เพื่อนร่วมงานของฉันสนับสนุนการใช้ศูนย์โดยอ้างถึงแบบอย่าง ได้รับสิ่งต่าง ๆ เช่นซ็อกเก็ตเครือข่ายมักจะใช้ศูนย์เพื่อเป็นตัวแทนของการหมดเวลาไม่ จำกัด ถ้าฉันจะเขียนโค้ดเกี่ยวกับซ็อกเก็ตวันนี้ฉันจะใช้ค่าที่ไม่สามารถใช้งานได้เองเพราะฉันรู้สึกว่ามันจะเป็นตัวแทนของความจริงที่ว่าไม่มีการหมดเวลา ตัวแทนคนไหนดีกว่ากัน? ทั้งสองต้องมีการตรวจสอบเงื่อนไขสำหรับค่าความหมาย "none" แต่ฉันเชื่อว่าประเภท nullable บ่งบอกถึงความตั้งใจดีขึ้นเล็กน้อย

15
เป็นความคิดที่ดีหรือไม่ที่จะแสดงรายการอาร์กิวเมนต์ของฟังก์ชัน / เมธอดทุกรายการในบรรทัดใหม่และเพราะเหตุใด
ฉันทำงานกับใครบางคนทุกครั้งที่พวกเขาเรียกฟังก์ชั่นที่พวกเขาวางข้อโต้แย้งในบรรทัดใหม่เช่น aFunction( byte1, short1, int1, int2, int3, int4, int5 ) ; ฉันพบว่ามันน่ารำคาญมากเพราะมันหมายความว่ารหัสไม่ได้กะทัดรัดดังนั้นฉันต้องสแกนขึ้นและลงเพื่อให้เข้าใจตรรกะ ฉันสนใจที่จะรู้ว่านี่เป็นการปฏิบัติที่ไม่ดีจริง ๆ หรือไม่และถ้าเป็นเช่นนั้นฉันจะโน้มน้าวให้พวกเขาทำไม่ได้อย่างไร

6
สไตล์ sizeof: sizeof (ชนิด) หรือตัวแปร sizeof?
ฉันเห็นสองรูปแบบการใช้งานsizeofสำหรับการดำเนินการที่เกี่ยวข้องกับหน่วยความจำ (เช่นในmemsetหรือmalloc): sizeof(type)และ sizeof variable หรือ sizeof(variable) คุณต้องการเลือกแบบใดหรือคุณใช้การผสมผสานระหว่างสองสไตล์และเมื่อใดที่คุณจะใช้แต่ละสไตล์ อะไรคือข้อดีข้อเสียของแต่ละสไตล์และเมื่อคุณใช้พวกเขา? เป็นตัวอย่างฉันสามารถดูคู่ของสถานการณ์ต่อไปนี้ที่ลักษณะหนึ่งช่วยและอีกลักษณะหนึ่งไม่ได้: เมื่อคุณทำให้ตัวชี้ไปทางผิด: type *var; ... memset(var, 0, sizeof var); /* oops */ เมื่อประเภทเปลี่ยนแปลง: new_type var; /* changed from old_type to new_type */ ... memset(&var, 0, sizeof(old_type)); /* oops */
22 c  coding-style 

5
ควรย้ายเงื่อนไขที่ไม่น่าสนใจไปยังส่วนเริ่มต้นของลูปหรือไม่?
ฉันได้ความคิดนี้จากคำถามนี้ใน stackoverflow.com รูปแบบต่อไปนี้เป็นเรื่องธรรมดา: final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } จุดที่ฉันพยายามทำคือข้อความที่มีเงื่อนไขเป็นเรื่องที่ซับซ้อนและไม่เปลี่ยนแปลง มันเป็นการดีกว่าที่จะประกาศในส่วนเริ่มต้นของลูปเช่นนี้? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } ชัดเจนกว่านี้ไหม เกิดอะไรขึ้นถ้านิพจน์เงื่อนไขนั้นง่ายเช่น …

6
รหัสทางวิทยาศาสตร์เป็นขอบเขตที่แตกต่างกันมากพอที่จะเพิกเฉยต่อมาตรฐานการเข้ารหัสทั่วไปหรือไม่?
เมื่อไม่นานมานี้ฉันพยายามจะปิดปากเรื่องดังต่อไปนี้ ในอีกด้านหนึ่งมีโฮสต์ของแนวทางการเข้ารหัสและมาตรฐานสำหรับสิ่งที่ถือว่าเป็น "สุขภาพ", "สะอาด", "ดีเขียน" และอื่น ๆ รหัส ดู "รหัสสะอาด" ที่ดูเหมือนจะพูดถึงกันอย่างกว้างขวางที่นี่เช่นกัน กฎตัวอย่าง: วิธียาว 7 บรรทัดและ 1 หรือ 2 ระดับของการเยื้อง รหัสที่ไม่ได้ปฏิบัติตามคาดว่าจะตายจากการบำรุงรักษาที่ไม่ดี ในทางกลับกันฉันได้ทำงานกับ OpenCV, OpenCascade, VTK และอื่น ๆ มันเป็นรหัสทางวิทยาศาสตร์ พวกเขามีวิธีการยาว 2 หน้า (sen ตัวเอง), OpenCascade มีวิธีการหรือคลาสแบ่งออกเป็น 10 ไฟล์ (ไม่มีเรื่องตลกที่นี่) VTK เป็นระเบียบในบางครั้งเช่นกัน แต่โครงการเหล่านี้ประสบความสำเร็จได้รับการดูแลและใช้อย่างกว้างขวาง! จับได้ที่ไหน เราได้รับอนุญาตให้เขียนโค้ดทางวิทยาศาสตร์คณิตศาสตร์หนัก ๆ ในแบบที่มันใช้งานได้และเราสามารถรักษามันไว้ได้หรือไม่? คุณเป็นชุดมาตรฐานแยกต่างหากสำหรับโครงการดังกล่าวหรือไม่ถ้ามี อาจเป็นคำถามที่ไร้เดียงสา แต่ฉันอยู่ในสิ่งที่ดูเหมือนจะเป็นโมฆะการเขียนโปรแกรมพยายามสร้างชุดของกฎวิธีการทำและไม่ทำสิ่งต่าง ๆ ซึ่งเป็นวิธีที่ฉันได้รับการสอนให้ทำงานที่โรงเรียนมัธยม นับตั้งแต่ที่ฉันเรียนจบฉันแทบจะไม่ได้รับการชี้นำจากสิ่งที่ฉันต้องทำโดยเฉพาะอย่างยิ่งการเขียนโปรแกรม …

5
คุณจะย่อยสลายนวกรรมิกได้อย่างไร?
ให้บอกว่าฉันมีคลาสศัตรูและตัวสร้างจะมีลักษณะดังนี้: public Enemy(String name, float width, float height, Vector2 position, float speed, int maxHp, int attackDamage, int defense... etc.){} สิ่งนี้ดูไม่ดีนักเนื่องจากตัวสร้างมีพารามิเตอร์มากมาย แต่เมื่อฉันสร้างอินสแตนซ์ของศัตรูฉันต้องระบุทุกสิ่งเหล่านี้ ฉันต้องการคุณลักษณะเหล่านี้ในคลาส Enemy เพื่อให้สามารถวนซ้ำรายการของพวกเขาและรับ / ตั้งค่าพารามิเตอร์เหล่านี้ ฉันคิดว่าอาจจะ subclassing Enemy เป็น EnemyB, EnemyA ในขณะที่ hardcoding maxHp ของพวกเขาและคุณลักษณะเฉพาะอื่น ๆ แต่จากนั้นฉันก็จะสูญเสียการเข้าถึงคุณลักษณะ hardcoded ของพวกเขาหากฉันต้องการย้ำผ่านรายการ EnemyA ของ EnemyA และ EnemyB EnemyC ของ) ฉันแค่พยายามเรียนรู้วิธีการเขียนโค้ดให้สะอาด ถ้ามันสร้างความแตกต่างฉันทำงานใน Java …

3
วิธีการอูฐกรณีที่คำติดต่อกันมีตัวเลข?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา เพียงแค่สงสัยว่าใครมีการประชุมที่ดีที่จะปฏิบัติตามในกรณีมุมมุมนี้ ฉันใช้ Java จริงๆ แต่คิดว่า C # folks อาจมีความเข้าใจที่ดีเช่นกัน สมมติว่าฉันกำลังพยายามตั้งชื่อคลาสที่คำสองคำติดต่อกันในชื่อคลาสเป็นตัวเลข (โปรดทราบว่าคำถามเดียวกันสามารถถามชื่อตัวระบุได้) ไม่สามารถเป็นตัวอย่างที่ดี แต่ลองนึกถึงบางอย่างเช่น "ค่า IEEE 802 16 บิต" การรวมตัวย่อติดต่อกันเป็น doable หากคุณยอมรับ classnames HttpUrlConnectionเช่น แต่มันอย่างจริงจังทำให้ฉันโยนขึ้นเล็ก ๆ น้อย ๆ IEEE80216BitValueที่จะคิดว่าการตั้งชื่อชั้นเรียน ถ้าฉันต้องเลือกฉันจะบอกว่ามันแย่ยิ่งกว่าIEEE802_16BitValueที่ดูเหมือนผิดพลาด สำหรับตัวเลขขนาดเล็กฉันจะพิจารณาIEEE802SixteenBitValueแต่นั่นก็ไม่ได้ดีขนาดนั้น ใครบ้างที่มีการประชุม? ดูเหมือนว่าแนวทางการตั้งชื่อของ Microsoft เป็นเพียงแนวทางเดียวที่อธิบายการตั้งชื่อตัวย่อโดยละเอียดเพื่อให้งานเสร็จ แต่ไม่มีใครได้ระบุหมายเลขในชื่อคลาส

4
อะไรคือชื่อสำนวนที่ใช้วิธีการผูกมัดเพื่อสร้างวัตถุ?
ฉันมักจะใช้รูปแบบที่ฉันใช้วิธีการผูกมัดการตั้งค่าวัตถุคล้ายกับBuilderหรือPrototypeรูปแบบ แต่ไม่ได้สร้างวัตถุใหม่ที่มีการเรียกแต่ละวิธีแทนการปรับเปลี่ยนวัตถุเดิม ตัวอย่าง: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); เพียงแค่สงสัยว่ามีชื่อสำหรับรูปแบบนี้หรือไม่และพิจารณาว่าเป็นรูปแบบการต่อต้านหรือไม่เพราะถึงแม้ว่ามันจะสามารถอ่านได้อย่างคล่องแคล่วมากขึ้นก็สามารถนำไปสู่โซ่วิธียาว

12
กระบวนทัศน์“ ทำสิ่งเดียว” เมื่อไรจะกลายเป็นอันตราย
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา เพื่อประโยชน์ของการโต้แย้งนี่คือตัวอย่างฟังก์ชั่นที่พิมพ์เนื้อหาของไฟล์ที่กำหนดทีละบรรทัด รุ่น 1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } ฉันรู้ว่าขอแนะนำให้ฟังก์ชั่นทำสิ่งหนึ่งที่ระดับหนึ่งของสิ่งที่เป็นนามธรรม สำหรับฉันแม้ว่าโค้ดด้านบนจะทำสิ่งหนึ่งและค่อนข้างปรมาณู หนังสือบางเล่ม (เช่น Clean Code ของ Robert C. Martin) ดูเหมือนจะแนะนำให้แบ่งรหัสด้านบนออกเป็นฟังก์ชันแยกต่างหาก …

9
การตั้งค่าสไตล์ LINQ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันมาใช้ LINQ ในการเขียนโปรแกรมทุกวันเป็นจำนวนมาก ในความเป็นจริงฉันไม่ค่อยได้ใช้ลูปที่ชัดเจน ฉันมี แต่พบว่าฉันไม่ได้ใช้ SQL เช่นไวยากรณ์อีกต่อไป ฉันใช้ฟังก์ชั่นเสริม ดังนั้นแทนที่จะพูดว่า: from x in y select datatransform where filter ฉันใช้: x.Where(c => filter).Select(c => datatransform) คุณชอบสไตล์ของ LINQ แบบไหนและคนอื่นในทีมของคุณพอใจกับอะไรบ้าง?
21 c#  coding-style  linq 

3
เมื่อใดที่ต้องเขียนคำสั่ง return ที่ชัดเจนใน Groovy
ในขณะนี้ฉันกำลังทำงานในโครงการ Groovy / Grails (ซึ่งฉันค่อนข้างใหม่) และฉันสงสัยว่าเป็นวิธีปฏิบัติที่ดีที่จะละเว้นreturnคำหลักในวิธีการของ Groovy หรือไม่ เท่าที่ฉันรู้ว่าคุณต้องแทรกคำหลักเช่นสำหรับคำสั่งป้องกันดังนั้นหนึ่งควรใช้มันทุกที่อื่นหรือไม่ ในความคิดของฉันreturnคำหลักเพิ่มเติมจะเพิ่มความสามารถในการอ่าน หรือมันเป็นสิ่งที่คุณเพิ่งคุ้นเคย ประสบการณ์ของคุณกับหัวข้อนั้นคืออะไร? ตัวอย่างบางส่วน: def foo(boolean bar) { // Not consistent if (bar) { return positiveBar() } negativeBar() } def foo2() { // Special Grails example def entitiy = new Entity(foo: 'Foo', bar: 'Bar') entity.save flush: true // Looks strange to …

3
ทำสำเนาค่าคงที่ระหว่างการทดสอบและรหัสการผลิตหรือไม่
การทำซ้ำข้อมูลระหว่างการทดสอบและรหัสจริงดีหรือไม่ดี ตัวอย่างเช่นสมมติว่าฉันมีคลาส Python FooSaverที่บันทึกไฟล์ด้วยชื่อเฉพาะลงในไดเรกทอรีที่กำหนด: class FooSaver(object): def __init__(self, out_dir): self.out_dir = out_dir def _save_foo_named(self, type_, name): to_save = None if type_ == FOOTYPE_A: to_save = make_footype_a() elif type == FOOTYPE_B: to_save = make_footype_b() # etc, repeated with open(self.out_dir + name, "w") as f: f.write(str(to_save)) def save_type_a(self): self._save_foo_named(a, "a.foo_file") def save_type_b(self): …

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