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

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

10
คุณส่งวัตถุหรือตัวแปรสมาชิกไปยังฟังก์ชั่นหรือไม่?
ซึ่งเป็นวิธีปฏิบัติที่ยอมรับกันโดยทั่วไประหว่างสองกรณีนี้: function insertIntoDatabase(Account account, Otherthing thing) { database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue()); } หรือ function insertIntoDatabase(long accountId, long thingId, double someValue) { database.insertMethod(accountId, thingId, someValue); } กล่าวอีกนัยหนึ่งโดยทั่วไปแล้วการส่งวัตถุทั้งหมดไปรอบ ๆ

4
การใช้งานสายอักขระ / หมายเลข [ปิด]
นี่เป็นหัวข้อที่ถกเถียงกันอยู่และฉันคิดว่ามีความคิดเห็นมากเท่ากับที่มีโปรแกรมเมอร์ แต่เพื่อประโยชน์ของมันฉันต้องการทราบว่าการปฏิบัติทั่วไปในธุรกิจคืออะไร (หรือในที่ทำงานของคุณ) ในที่ทำงานของฉันเรามีแนวทางการเข้ารหัสที่เข้มงวด ส่วนหนึ่งของนั้นจะทุ่มเทให้กับสายอักขระ / หมายเลข มันระบุ (สำหรับ C #): อย่าใช้ค่าตัวอักษรตัวเลขหรือสตริงในรหัสของคุณนอกเหนือจากการกำหนดค่าคงที่เชิงสัญลักษณ์ ใช้รูปแบบต่อไปนี้เพื่อกำหนดค่าคงที่: public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; } มีข้อยกเว้นคือค่า 0, 1 และ null สามารถใช้ได้อย่างปลอดภัยเกือบตลอดเวลา บ่อยครั้งที่ค่า 2 และ -1 ก็โอเคเช่นกัน สตริงที่มีไว้สำหรับการบันทึกหรือการติดตามได้รับการยกเว้นจากกฎนี้ อนุญาตให้ใช้ตัวอักษรเมื่อความหมายชัดเจนจากบริบทและไม่ขึ้นอยู่กับการเปลี่ยนแปลงในอนาคต mean = (a + b) …

9
ตัวแบ่งบรรทัดก่อน / หลังตัวดำเนินการ [ปิด]
ในขณะที่การประชุมจาวาโค้ดของซันแนะนำให้วางเส้นแบ่งไว้ก่อนที่ผู้ปฏิบัติงานแนวทางอื่น ๆ จะไม่เห็นด้วย ฉันไม่เห็นข้อดีข้อเสียใด ๆ ที่ชัดเจนดังนั้นจึงมีข้อดีของการใช้รูปแบบเหล่านี้กับอีกรูปแบบหนึ่งหรือไม่ String longVarName = a + b + c + d + e + f; VS String longVarName = a + b + c + d + e + f;

1
วิธีการจัดการกับฟังก์ชั่นที่ผิดในรหัสการผลิต?
ฉันเพิ่งเจอห้องสมุด Python ใน GitHub ไลบรารี่นั้นยอดเยี่ยม แต่มีการพิมพ์ผิดที่หนึ่งในชื่อฟังก์ชั่น ขอเรียกว่าในขณะที่มันควรจะเป็นdummy_fuction() dummy_function()ฟังก์ชั่นนี้ "แน่นอน" และมักใช้ในระบบฝังตัว สิ่งแรกที่ควรคำนึงถึงคือการเพิ่มรุ่นที่สองของฟังก์ชั่นที่มีชื่อที่ถูกต้องและเพิ่มคำเตือนการเลิกใช้ในรุ่นแรกสำหรับรุ่นถัดไป คำถามสามข้อ: แนวทางข้างต้นอาจมีผลที่ไม่ตั้งใจหรือไม่? มีวิธีการมาตรฐานในการแก้ไขปัญหานี้หรือไม่? ควรมีคำเตือนใด ๆ เกี่ยวกับการคัดค้านทิ้งไว้นานเท่าใด

6
ข้อควรพิจารณาในทางปฏิบัติสำหรับข้อตกลงการตั้งชื่อ HTML / CSS (ไวยากรณ์) [ปิด]
คำถาม: สิ่งที่ต้องคำนึงถึงในทางปฏิบัติสำหรับไวยากรณ์classและidค่าคืออะไร? โปรดทราบว่าฉันไม่ได้ถามเกี่ยวกับความหมายเช่นคำที่ใช้จริงเช่นตามที่อธิบายไว้ในบล็อกนี้ มีทรัพยากรมากมายที่ด้านข้างของอนุสัญญาการตั้งชื่อแล้วในความเป็นจริงบดบังการค้นหาของฉันสำหรับข้อมูลที่เป็นประโยชน์ในบิตเกี่ยวกับการสร้างประโยคต่าง ๆ: ปลอกใช้ interpunction (เฉพาะ-เส้นประ) อักขระเฉพาะที่จะใช้หรือหลีกเลี่ยง ฯลฯ เพื่อสรุปเหตุผลที่ฉันถามคำถามนี้: ข้อ จำกัดในการตั้งชื่อไอดีและคลาสไม่ได้นำไปสู่การประชุมใด ๆ ความอุดมสมบูรณ์ของทรัพยากรทางด้านความหมายของอนุสัญญาการตั้งชื่อปิดบังการค้นหาข้อควรพิจารณาทางวากยสัมพันธ์ ฉันไม่พบแหล่งข้อมูลที่เชื่อถือได้เกี่ยวกับเรื่องนี้ ยังไม่มีคำถามเกี่ยวกับ SE โปรแกรมเมอร์ในหัวข้อนี้ :) อนุสัญญาบางข้อที่ฉันได้พิจารณาแล้วว่าใช้: UpperCamelCaseส่วนใหญ่เป็นนิสัยการข้ามจากการเข้ารหัสฝั่งเซิร์ฟเวอร์ lowerCamelCaseเพื่อความสอดคล้องกับข้อกำหนดการตั้งชื่อ JavaScript css-style-classesซึ่งสอดคล้องกับการตั้งชื่อคุณสมบัติ css (แต่อาจน่ารำคาญเมื่อ Ctrl + Shift + ArrowKey เลือกข้อความ) with_under_scoresซึ่งโดยส่วนตัวฉันไม่ได้เห็นใช้มากนัก alllowercaseง่ายต่อการจดจำ แต่อาจอ่านยากสำหรับชื่อที่ยาวขึ้น UPPERCASEFTWเป็นวิธีที่ดีในการรบกวนโปรแกรมเมอร์เพื่อนของคุณ (อาจรวมกับตัวเลือก 4 สำหรับการอ่าน) และอาจเป็นไปได้ว่าฉันไม่มีตัวเลือกหรือชุดค่าผสมที่สำคัญ ดังนั้น: มีข้อควรพิจารณาอะไรบ้างในการตั้งชื่ออนุสัญญา

6
มีเหตุผลอะไรที่ดีที่จะใช้ประโยชน์จากคำหลัก SQL?
ดูเหมือนว่ามีนักพัฒนาจำนวนมากที่เขียน SQL โดยใช้คำหลักเป็นตัวพิมพ์ใหญ่: SELECT column FROM table INNER JOIN table ON condition WHERE condition GROUP BY clause HAVING condition ฉันสงสัยว่าทำไมผู้คนถึงติดวิธีนี้ เห็นได้ชัดว่าเป็นแบบแผนที่มีมายาวนาน แต่ฉันไม่เคยพบกับ RDBMS ที่ต้องใช้อักษรตัวพิมพ์ใหญ่ โดยส่วนตัวแล้วฉันพบคำหลักที่ควรเรียกร้องความสนใจไปยังส่วนที่ไม่ถูกต้องของแบบสอบถามซึ่งเป็นสาเหตุที่ฉันเขียนคำหลักเป็นตัวพิมพ์เล็ก ยังมีคนจำนวนมากพอใช้อนุสัญญานี้ที่ฉันคิดว่าฉันอาจจะพลาดบางสิ่งดังนั้นคำถามนี้

5
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน: (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive))) ทำไมไม่ใช้การประชุมเช่น C หรือ Java โอเค Lisp มีอายุมากกว่าภาษาเหล่านั้นมาก แต่ฉันกำลังพูดถึง Lispers ร่วมสมัย (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive) ) ) หมายเหตุ: ข้อมูลโค้ดมาจากหนังสือ "ความสุขของ Clojure"

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

17
คุณตั้งชื่อตัวแปรส่วนตัวใน C # ได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา แนวปฏิบัติที่ดีที่สุดคืออะไรหลักการจัดการการตั้งชื่อที่ยอมรับกันทั่วไปสำหรับตัวแปรส่วนตัวใน C # private int myInteger; private int MyInteger; private int mMyInteger; private int _myInteger; private int _MyInteger; ตัวเลือกอื่น ๆ ที่ลึกลับ คุณใช้อันไหนและเพราะอะไร (บริษัท ของฉันค่อนข้างใหม่สำหรับ C # และฉันต้องการเลือกวิธี "ยอมรับในอุตสาหกรรม" มากที่สุดเพื่อลองใช้มาตรฐานการเข้ารหัสของเรา)

8
ข้อห้ามในการใช้ลูปภายในลูปคืออะไร
แค่สงสัย. สิ่งที่ฉันเคยมีมากที่สุดคือสำหรับวงในสำหรับวงเนื่องจากหลังจากอ่านบทความนี้จากLinus Torvalds: แท็บคือ 8 ตัวอักษรและทำให้การเยื้องเป็น 8 ตัวอักษร มีการเคลื่อนไหวนอกรีตที่พยายามทำการเยื้อง 4 (หรือแม้แต่ 2!) ตัวละครที่ลึกและคล้ายกับการพยายามกำหนดค่าของ PI ให้เป็น 3 เหตุผล: แนวคิดทั้งหมดที่อยู่เบื้องหลังการเยื้องคือการกำหนดที่บล็อกของการควบคุมเริ่มต้นและสิ้นสุดอย่างชัดเจน โดยเฉพาะอย่างยิ่งเมื่อคุณดูหน้าจอเป็นเวลา 20 ชั่วโมงติดต่อกันคุณจะพบว่าการเยื้องนั้นง่ายกว่ามากหากคุณมีการเยื้องขนาดใหญ่ ตอนนี้บางคนจะอ้างว่าการมีการเยื้องตัวอักษร 8 ตัวทำให้โค้ดเคลื่อนที่ไปทางขวาจนเกินไปและทำให้อ่านได้ยากบนหน้าจอเทอร์มินัล 80 ตัว คำตอบก็คือหากคุณต้องการการเยื้องมากกว่า 3 ระดับคุณจะถูกเกลียวอยู่แล้วและควรแก้ไขโปรแกรมของคุณ https://www.kernel.org/doc/Documentation/CodingStyle ฉันคิดว่ามันเป็นวิธีปฏิบัติที่ยอมรับไม่ได้สำหรับฉันที่จะไปที่เลเยอร์ที่สามของการวนซ้ำและจะปรับโครงสร้างรหัสของฉัน (เบื้องต้น Qt) Linus พูดเล่นหรือเปล่า มันขึ้นอยู่กับภาษาหรือแอพพลิเคชั่นหรือไม่? มีบางสิ่งที่จำเป็นต้องวนซ้ำอย่างน้อยสามระดับหรือไม่

7
หลีกเลี่ยงวิธีที่ซับซ้อนเกินไป - Cyclomatic Complexity
ไม่แน่ใจว่าจะไปเกี่ยวกับวิธีการนี้เพื่อลดความซับซ้อนของวัฏจักร โซนาร์รายงาน 13 ขณะที่ 10 คาดว่าจะเป็น ฉันแน่ใจว่าไม่มีอะไรเป็นอันตรายต่อการออกจากวิธีการนี้เหมือนเดิมอย่างไรก็ตามเพียงแค่ท้าทายฉันว่าจะทำตามกฎของ Sonar อย่างไร ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) …

3
การตั้งชื่อวิธีการ "ทำ X ถ้าจำเป็น"
เป็นวิธีที่ดีในการตั้งชื่อวิธีการที่ตรวจสอบว่า X จะต้องทำคืออะไรและ X มันถ้าจำเป็น? ตัวอย่างเช่นวิธีตั้งชื่อวิธีการที่จะอัพเดทรายชื่อผู้ใช้หากผู้ใช้ใหม่ได้เข้าสู่ระบบ? UpdateListIfNeededดูเหมือนจะนานเกินไปในขณะที่ความเรียบง่ายUpdateListหมายถึงการดำเนินการที่อาจมีราคาแพงและไม่จำเป็นทุกครั้ง EnsureListUpdatedเป็นตัวแปรเช่นกัน C # มีbool TryXXX(args, out result)รูปแบบ (เช่นint.TryParse(str, out num)) เพื่อตรวจสอบว่า X เป็นไปได้และทำมัน แต่นั่นแตกต่างอย่างละเอียด

12
ฟังก์ชั่นแบบยาวยอมรับได้หรือไม่หากมีโครงสร้างภายใน
เมื่อจัดการกับอัลกอริทึมที่ซับซ้อนในภาษาที่รองรับฟังก์ชันซ้อนกัน (เช่น Python และ D) ฉันมักจะเขียนฟังก์ชั่นขนาดใหญ่ (เพราะอัลกอริทึมมีความซับซ้อน) แต่ลดขนาดลงโดยใช้ฟังก์ชันซ้อนเพื่อสร้างโค้ดที่ซับซ้อน ฟังก์ชั่นขนาดใหญ่ (100+ บรรทัด) ยังถือว่าเป็นความชั่วแม้ว่าจะมีโครงสร้างที่ดีภายในผ่านการใช้ฟังก์ชั่นที่ซ้อนกันอยู่หรือไม่? แก้ไข: สำหรับผู้ที่คุณไม่คุ้นเคยกับ Python หรือ D ฟังก์ชั่นที่ซ้อนกันในภาษาเหล่านี้ยังอนุญาตการเข้าถึงขอบเขตฟังก์ชั่นด้านนอก ใน D การเข้าถึงนี้ช่วยให้การกลายพันธุ์ของตัวแปรในขอบเขตด้านนอก ใน Python อนุญาตให้อ่านได้เท่านั้น ใน D staticคุณสามารถปิดการเข้าถึงอย่างชัดเจนขอบเขตด้านนอกในฟังก์ชั่นที่ซ้อนกันโดยประกาศว่า

21
เทียบกับการจัดทำรหัสตนเอง แสดงความคิดเห็นรหัส
ล็อคแล้ว คำถามนี้ถูกล็อคเนื่องจากมีความคิดเห็นนอกหัวข้อจำนวนมาก ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันมีการค้นหา แต่ไม่พบสิ่งที่ฉันกำลังมองหาโปรดเชื่อมโยงฉันหากคำถามนี้ถูกถามไปแล้ว เมื่อต้นเดือนที่โพสต์นี้ถูกสร้าง: http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/ โดยสรุปแล้วคุณเป็นโปรแกรมเมอร์ที่ไม่ดีถ้าคุณไม่เขียนความคิดเห็น ความคิดเห็นส่วนตัวของฉันคือรหัสควรเป็นคำอธิบายและส่วนใหญ่ไม่ต้องการความคิดเห็นยกเว้นว่าโค้ดไม่สามารถอธิบายตัวเองได้ ในตัวอย่างที่กำหนด // Get the extension off the image filename $pieces = explode('.', $image_name); $extension = array_pop($pieces); ผู้เขียนกล่าวว่ารหัสนี้ควรได้รับการแสดงความคิดเห็นความคิดเห็นส่วนตัวของฉันคือรหัสควรจะเรียกฟังก์ชั่นที่เป็นคำอธิบาย: $extension = GetFileExtension($image_filename); อย่างไรก็ตามในความคิดเห็นที่มีคนให้คำแนะนำนั้น: http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/comment-page-2/#comment-357130 ผู้เขียนตอบโดยกล่าวว่าผู้วิจารณ์คือ "หนึ่งในคนเหล่านั้น" คือโปรแกรมเมอร์ที่ไม่ดี ทุกคนมีความเห็นอย่างไรกับรหัสอธิบายตนเองเทียบกับรหัสความคิดเห็น?

6
มาตรฐานการเข้ารหัสหน่วยทดสอบ
โดยปกติเมื่อพูดถึงมาตรฐานการเข้ารหัสเราอ้างถึงรหัสของโปรแกรม แต่สิ่งที่เกี่ยวกับการทดสอบหน่วย? มีแนวทางมาตรฐานการเข้ารหัสบางอย่างที่ไม่ซ้ำกับการทดสอบหน่วย? พวกเขาคืออะไร

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