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

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

7
ตรวจสอบให้แน่ใจว่าส่วนหัวจะถูกรวมไว้อย่างชัดเจนในไฟล์ CPP
ฉันคิดว่าเป็นเรื่องดี#includeสำหรับส่วนหัวสำหรับประเภทใด ๆ ที่ใช้ในไฟล์ CPP โดยไม่คำนึงถึงสิ่งที่รวมอยู่ในไฟล์ HPP ดังนั้นฉันจึงอาจเป็นได้#include <string>ทั้ง HPP และ CPP แม้ว่าฉันจะสามารถรวบรวมได้หากฉันข้ามใน CPP ด้วยวิธีนี้ฉันไม่ต้องกังวลว่า HPP ของฉันจะใช้การประกาศล่วงหน้าหรือไม่ มีเครื่องมือใดที่สามารถบังคับใช้#includeรูปแบบการเข้ารหัสนี้ได้หรือไม่? ฉันควรบังคับใช้รูปแบบการเข้ารหัสนี้หรือไม่ เนื่องจากตัวประมวลผลล่วงหน้า / คอมไพเลอร์ไม่สนใจว่า#includeจะมาจาก HPP หรือ CPP ฉันจึงไม่ได้รับคำติชมถ้าฉันลืมทำตามสไตล์นี้

3
วิธีจัดการกับ Classes ที่มีชื่อเดียวกัน (แพ็คเกจที่ต่างกัน)
ฉันและทีม R&D ของฉันรักษา codebase ขนาดใหญ่ เราได้แบ่งตรรกะทางธุรกิจของเราออกเป็นหลายแพ็คเกจ บางแห่งที่มีชั้นเรียนที่มีชื่อเหมือน ในขณะที่คุณสามารถเดาได้ว่าชื่อนั้นขัดแย้งกันเมื่อมีการอ้างอิงทั้งสองคลาสในไฟล์ Java เดียวกัน ตัวอย่างเช่น: com.myapp.model (package) - Device (class) - ... com.myapp.data (package) - Device (class) - ... เราได้ถกเถียงกันว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดในการรักษากรณีเหล่านี้และตัวเลือกต่อไปนี้เกิดขึ้น: ตัวเลือกที่ 1 การเปลี่ยนชื่อชั้นเรียนโดยเพิ่มคำนำหน้า ModelDevice DataDevice ตัวเลือกที่ 2 ใช้ชื่อเต็ม package + class เมื่อทั้งคู่ถูกอ้างอิง com.myapp.model.Device com.myapp.data.Device มีอะไรที่ถูกต้องมากขึ้นในแง่ของการจัดการรหัสและความยืดหยุ่น? ขณะนี้เรากำลังผสมทั้งแนวทางและเริ่มมีความไม่สอดคล้องกัน

6
จะลดสวิตช์ในคำสั่ง switch ได้อย่างไร?
ดังนั้นฉันจึงสร้างวิธีการสร้างบรรทัดคำทักทายตามคนสองคนจากฐานข้อมูล มีพารามิเตอร์สี่ตัว ได้แก่ สองชื่อ ( name1และname2) และสองเพศ ( genderและgender2) สำหรับการรวมเพศทุกครั้งฉันมีเอาท์พุทที่แตกต่างกัน ตัวอย่างเช่น: ถ้าเพศ 1 คือM(ชาย) และเพศ 2 เป็นเช่นMกันผลลัพธ์ควรเป็นดังนี้: Dear Sir name1 and Sir name2, ในเวลานี้สวิตช์ของฉันมีลักษณะดังนี้: switch(gender1){ case 'M': switch(gender2){ case 'M': printf("Dear Sir %s and Sir %s", name1, name2); break; case 'W': printf("Dear Sir %s and Madame %s", name1, name2); break; …

5
เหตุใดจึงควรใช้ HashMap (ในฟังก์ชั่น) เพื่อกำหนดค่าที่จะส่งคืน (สำหรับคีย์) เมื่อโครงสร้าง if อื่นสามารถทำงานได้ในเวลาที่ดีกว่า
ขณะที่ฉันทำงานกับ บริษัท ใหญ่เมื่อไม่นานมานี้ฉันสังเกตเห็นว่าโปรแกรมเมอร์ที่นั่นปฏิบัติตามรูปแบบการเข้ารหัสนี้: สมมติว่าฉันมีฟังก์ชั่นที่ส่งกลับ 12 ถ้าอินพุตเป็น A, 21 ถ้าอินพุตเป็น B และ 45 ถ้าอินพุตเป็น C ดังนั้นฉันสามารถเขียนฟังก์ชั่นลายเซ็นเป็น: int foo(String s){ if(s.equals("A")) return 12; else if(s.equals("B")) return 21; else if(s.equals("C")) return 45; else throw new RuntimeException("Invalid input to function foo"); } แต่ในการตรวจสอบรหัสฉันถูกขอให้เปลี่ยนฟังก์ชั่นต่อไปนี้: int foo(String s){ HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("A", …

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

3
การจัดการกับปิรามิดของ node.js
ฉันเพิ่งเริ่มใช้โหนดและสิ่งหนึ่งที่ฉันสังเกตเห็นได้อย่างรวดเร็วก็คือการโทรกลับอย่างรวดเร็วสามารถสร้างการเยื้องระดับที่บ้าบิ่นได้อย่างไร: doStuff(arg1, arg2, function(err, result) { doMoreStuff(arg3, arg4, function(err, result) { doEvenMoreStuff(arg5, arg6, function(err, result) { omgHowDidIGetHere(); }); }); }); คู่มือสไตล์อย่างเป็นทางการกล่าวว่าจะนำแต่ละโทรกลับในฟังก์ชั่นที่แยกกัน แต่ที่ดูเหมือนว่ามากเกินไปข้อ จำกัด ในการใช้งานของการปิดและทำให้วัตถุเดียวที่ประกาศในระดับบนสุดที่มีหลายชั้นลงเป็นวัตถุจะต้องมีการผ่านทั้งหมด การเรียกกลับระดับกลาง การใช้ขอบเขตฟังก์ชั่นช่วยได้หรือไม่? ใส่ฟังก์ชั่นการโทรกลับทั้งหมดที่ต้องการเข้าถึงวัตถุ Global-ish ภายในฟังก์ชั่นที่ประกาศวัตถุนั้นดังนั้นมันจึงปิดลง? function topLevelFunction(globalishObject, callback) { function doMoreStuffImpl(err, result) { doMoreStuff(arg5, arg6, function(err, result) { callback(null, globalishObject); }); } doStuff(arg1, arg2, doMoreStuffImpl); } …

6
ทีมของฉันควรใช้มาตรฐานการเข้ารหัสที่ได้รับการยอมรับเป็นพื้นฐานของตัวเองหรือไม่?
ทีมวิจัยและพัฒนาที่ฉันอยู่ได้ตัดสินใจใช้มาตรฐานการเข้ารหัส เราเพิ่งก่อตั้งเมื่อไม่นานมานี้และมีรหัสน้อยเกินไปและเวลาการเข้ารหัสทั่วไปของเราเองที่จะยึดมาตรฐาน / เอกสารการประชุมว่าสิ่งใดที่มีการพัฒนาโดยทั่วไปในทีมของเราและจากตัวอย่างที่ดีจากรหัสของเราเองเป็นต้น ตอนนี้พวกเราทุกคนมีประสบการณ์จากสถานที่ทำงานที่ผ่านมา - แม้ว่าเราจะไม่มีใครพูดว่า "เราขอรับรองเอกสารฉบับนี้ที่นี่ฉันพบว่าเหมาะสำหรับงานที่เราทำที่นี่" (*) นอกจากนี้พวกเราบางคน (รวมถึงตัวฉันเอง) มีประสบการณ์จากสถานที่ที่ไม่มีมาตรฐานการเข้ารหัสอย่างเป็นทางการเท่านั้นหรือการเขียนในภาษาต่าง ๆ ในสภาพแวดล้อมที่แตกต่างกัน (สภาพแวดล้อมการผลิตที่มีแรงกดดันสูงทุกสัปดาห์ หนึ่งในตัวเลือกที่ฉันคิดอยู่ก็คือการนำเอกสารที่เป็นที่รู้จักและได้รับการยอมรับมาอย่างดีคัดลอกสิ่งที่เราไม่สนใจ / สนใจและทำการแก้ไขตามความต้องการของเรา นี่เป็นเรื่องธรรมดาไหม คุณเชื่อว่านี่เป็นความคิดที่ดีหรือไม่? ถ้าเป็นเช่นนั้นสิ่งที่จะเป็นมาตรฐานการเข้ารหัส 'พื้นฐาน' ที่เหมาะสม (อย่าบอกฉันว่าอะไรดีที่สุดฉันไม่ต้องการเริ่มต้นความขัดแย้งทางศาสนาที่นี่เพียงแค่ชี้ให้เห็นว่าอะไรจะครอบคลุมหรือ 'เป็นกลาง' พอที่จะสร้าง .) หมายเหตุ: เราคาดว่าจะทำงานกับ C, C ++, OpenCL, CUDA, Python เราเป็นทีมงานของ 4 คน + ผู้จัดการคาดว่าจะเติบโตประมาณ 5-6 ภายในหนึ่งปี ใน บริษัท ของเราทีมเกือบทั้งหมดเป็นอิสระและมักจะไม่โต้ตอบเลย (ไม่ใช่แม้กระทั่งโดยใช้รหัสของกันและกัน - งานอยู่ในโครงการที่แตกต่างกันโดยสิ้นเชิง); ดังนั้น - …

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

1
การใช้ '{}' ภายในรูปแบบสตริงถือว่าเป็น Pythonic หรือไม่
ฉันเพิ่งรู้ว่าคุณสามารถเขียน '{}{}'.format(string_a, string_b) แทน '{0}{1}'.format(string_a, string_b) ใน Python เช่นคุณสามารถละเว้นตัวเลขสำหรับพารามิเตอร์รูปแบบสตริงเมื่อคุณต้องการสิ่งที่จะสล็อตในหนึ่งโดยหนึ่งในการสั่งซื้อ สิ่งนี้ถือว่าเป็น Pythonic หรือไม่ หมายเหตุ: "Pythonic" เป็นคำที่ใช้กันทั่วไปในหมู่ Python โปรแกรมเมอร์เพื่อหมายถึงรหัส Python ภายในวัฒนธรรม Python มีความเห็นพ้องที่ชัดเจนเกี่ยวกับคำถามสไตล์โดยเฉพาะอย่างยิ่งสำหรับคำถามที่เฉพาะเจาะจงเช่นนี้เนื่องจากปรัชญาการออกแบบที่ชัดเจนของภาษาที่ว่า "ควรมีอย่างใดอย่างหนึ่งและดีกว่าเพียงวิธีเดียวเท่านั้นที่จะทำได้" นี่คือคำพูดที่มาจาก "The Zen of Python" ซึ่งเป็นชุดของคำพังเพยที่จะกำหนดนิยามของ "Pythonic" และรวมอยู่ในทุก ๆ การแจกจ่ายของ Python (ที่บรรทัดคำสั่งใด ๆ ของ Python interpreter ให้ป้อนimport thisเพื่อดู)

2
ใช้อย่างอื่นหลังจากข้อยกเว้น (หรือไม่)
พิจารณารหัสนี้หน่อย: if (x == 1) { throw "no good; aborting" ; } [... more code ...] พิจารณารหัสนี้: if (x == 1) { throw "no good; aborting" ; } else { [... more code ...] } ทั้งสองกรณีทำงานในลักษณะเดียวกัน กรณีแรกที่มีประโยชน์ที่คุณจะได้ไม่ต้อง "ห่อ" elseส่วนที่เหลือของรหัสในนั้น ประการที่สองมีความได้เปรียบดังต่อไปนี้การปฏิบัติของอย่างชัดเจนมีที่สำหรับทุกคนelseif ทุกคนสามารถให้ข้อโต้แย้งที่มั่นคงในความโปรดปรานของหนึ่งมากกว่าอีก?

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

4
ฟังก์ชั่นที่ไม่ระบุชื่อกับฟังก์ชั่นที่มีชื่อแยกต่างหากสำหรับการเริ่มต้นใน jquery
สมมติว่าเรามีรหัสบางอย่างที่ใช้ในการเริ่มต้นสิ่งต่าง ๆ เมื่อโหลดหน้าเว็บและมีลักษณะดังนี้: function initStuff() { ...} ... $(document).ready(initStuff); ฟังก์ชัน initStuff ถูกเรียกจากบรรทัดที่สามของตัวอย่างเท่านั้น ไม่มีอีกครั้ง. ดังนั้นโดยปกติผู้คนจะใส่สิ่งนี้ลงในการติดต่อกลับแบบไม่ระบุชื่อเช่นนี้ $(document).ready(function() { //Body of initStuff }); การมีฟังก์ชั่นในตำแหน่งเฉพาะในรหัสนั้นไม่ได้ช่วยในการอ่านได้จริง ๆ เพราะการโทรพร้อม () ทำให้มันชัดเจนว่านี่เป็นรหัสเริ่มต้น มีเหตุผลอื่นอีกไหมที่จะชอบอีกอันหนึ่ง?

2
การเว้นวรรคแบบนี้น่าอึดอัดใจไหม
ในการอ่านรหัสโปรแกรมเมอร์อื่นเขาใช้รูปแบบที่ฉันไม่เคยเห็นมาก่อน เช่น namespace MyNs.HereWeAre {//tab here for some reason public class SomeClass {//here's another tab public string Method() {//yet another tab string _variable = "";//no tab implementation return _variable; } }//eof - class (Yes these eof comments are on every file) }//eof - namespace // eof - file ฉันจะยอมรับ ... …

4
ทางเลือกที่ใช้ได้จริงใด ๆ กับรูปแบบสัญญาณ + สล็อตสำหรับการเขียนโปรแกรม GUI?
GUI Toolkits ส่วนใหญ่ทุกวันนี้ใช้รูปแบบสัญญาณ + สล็อต มันเป็น Qt และ GTK + ถ้าฉันไม่ผิดใครเป็นผู้บุกเบิก คุณรู้หรือไม่ว่าวิดเจ็ตหรือวัตถุกราฟิก (บางครั้งแม้แต่รายการที่ไม่ได้แสดง) จะส่งสัญญาณไปยังตัวจัดการหลักของลูป ตัวจัดการหลักของวงแล้วเรียกเหตุการณ์ , การเรียกกลับหรือช่องที่ได้รับมอบหมายสำหรับเครื่องมือวัตถุที่ / กราฟิก โดยปกติจะมีvirtualตัวจัดการเหตุการณ์เริ่มต้น (และในกรณีส่วนใหญ่) ชุดเครื่องมือสำหรับการจัดการสัญญาณที่กำหนดไว้ล่วงหน้าทั้งหมดซึ่งแตกต่างจากการออกแบบก่อนหน้านี้ที่ผู้พัฒนาต้องเขียนทั้ง main-loop และ handler สำหรับแต่ละข้อความ (คิดว่า WINAPI) ผู้พัฒนาเพียง แต่ต้องกังวลเกี่ยวกับสัญญาณที่เขาต้องการในการใช้งานฟังก์ชั่นใหม่ ตอนนี้การออกแบบนี้ถูกใช้ในชุดเครื่องมือที่ทันสมัยที่สุดเท่าที่ฉันรู้ มี Qt, GTK +, FLTK เป็นต้นมี Java Swing C # มีคุณสมบัติภาษาสำหรับมัน (เหตุการณ์และผู้รับมอบสิทธิ์) และ Windows Forms ได้รับการพัฒนาในการออกแบบนี้ ในความเป็นจริงในทศวรรษที่ผ่านมาการออกแบบสำหรับการเขียนโปรแกรม GUI นี้ได้กลายเป็นมาตรฐานที่ไม่ได้เขียนไว้ …

7
กำลังตรวจสอบว่าเมธอดส่งคืน false หรือไม่: กำหนดผลลัพธ์ให้กับตัวแปรชั่วคราวหรือทำให้การเรียกใช้เมธอดตรงตามเงื่อนไขหรือไม่
เป็นวิธีปฏิบัติที่ดีในการเรียกใช้เมธอดที่ส่งคืนค่าจริงหรือเท็จในคำสั่ง if หรือไม่? บางสิ่งเช่นนี้ private void VerifyAccount() { if (!ValidateCredentials(txtUser.Text, txtPassword.Text)) { MessageBox.Show("Invalid user name or password"); } } private bool ValidateCredentials(string userName, string password) { string existingPassword = GetUserPassword(userName); if (existingPassword == null) return false; var hasher = new Hasher { SaltSize = 16 }; bool passwordsMatch = hasher.CompareStringToHash(password, …

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