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

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

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

4
ส่วนต่อประสานที่คล่องแคล่วมีความยืดหยุ่นมากกว่าคุณสมบัติและทำไม?
ในการสอนโค้ด EF 4.1 รหัสแรกจะได้รับรหัสต่อไปนี้: public class Department { public int DepartmentId { get; set; } [Required] public string Name { get; set; } public virtual ICollection<Collaborator> Collaborators { get; set; } } จากนั้นจะอธิบายว่าอินเทอร์เฟซที่คล่องแคล่วมีความยืดหยุ่นมากขึ้น: คำอธิบายประกอบข้อมูลนั้นใช้งานง่ายอย่างแน่นอน แต่ควรใช้วิธีการเขียนโปรแกรมที่ให้ความยืดหยุ่นมากกว่า ตัวอย่างของการใช้ส่วนต่อประสานที่คล่องแคล่วจะได้รับ: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().Property(dp => dp.Name).IsRequired(); modelBuilder.Entity<Manager>().HasKey(ma => ma.ManagerCode); modelBuilder.Entity<Manager>().Property(ma => …
15 c#  coding-style 

6
ศูนย์เป็นค่าคงที่หรือไม่?
ฉันได้เจอสำนวนการเขียนโปรแกรมนี้เมื่อเร็ว ๆ นี้: const float Zero = 0.0; ซึ่งจะใช้ในการเปรียบเทียบ: if (x > Zero) {..} ใครสามารถอธิบายได้ว่าสิ่งนี้มีประสิทธิภาพมากขึ้นหรือสามารถอ่านหรือบำรุงรักษาได้ดีกว่า: if (x > 0.0) {..} หมายเหตุ: ฉันสามารถคิดอื่น ๆเหตุผลที่จะกำหนดนี้คงอิ่มเพียงแค่สงสัยเกี่ยวกับการใช้งานในนี้บริบท

2
ค่าใช้จ่ายวิธีการของวัตถุประสงค์ -c ทำให้วิธีการออกแบบ 'เล็ก ๆ น้อย ๆ หลายวิธี' ไม่สามารถมองเห็นได้หรือไม่?
ฉันมักโปรดปรานโดยใช้วิธีการเล็ก ๆ ตามคำแนะนำของหมู่คนบ๊อบมาร์ตินรหัสสะอาด ฉันได้อ่านยังเพียงพอเกี่ยวกับ internals Objective-C ที่จะมีอย่างน้อยความคิดบางอย่างเกี่ยวกับวิธีการจัดส่งข้อความการทำงานของมัน ( ชุด bbumsเป็นข้อมูลโดยเฉพาะอย่างยิ่งเกี่ยวกับเรื่องนี้) ความกังวลเกี่ยวกับการปรับให้เหมาะสมก่อนวัยอันควรถึงกระนั้นฉันอยากจะรู้ว่าสิ่งที่การทำงานของ Objective-c ทำกับ objc_msgSend หรือไม่นั้นในทางปฏิบัตินั้นมีความหมายเพียงพอสำหรับแนวทาง 'วิธีเล็ก ๆ น้อย ๆ ' การค้นพบเชิงประจักษ์นั้นน่ายินดีเป็นอย่างยิ่ง (บางทีฉันอาจตั้งค่าการทดสอบด้วยตัวเอง) ประสบการณ์จากผู้ที่เขียนโครงการวัตถุประสงค์ขนาดใหญ่ก็คงจะยอดเยี่ยมเช่นกัน การอธิบาย น้ำเสียงทั่วไปของคำถามนั้นมีเจตนา ฉันไม่ได้ถามเกี่ยวกับการปรับแต่งประสิทธิภาพของแอพเฉพาะ (ซึ่งเป็นเหตุผลที่ฉันถามที่นี่มากกว่า SO) แต่เพิ่มเติมเกี่ยวกับว่าลักษณะภาษาของ Objective-C กีดกันวิธีการออกแบบที่แน่นอนหรือไม่ ฉันได้สังเกตว่ารหัสส่วนใหญ่ที่ฉันเห็นจาก Apple และฝ่ายอื่น ๆ (ใน GitHub ฯลฯ ) มีแนวโน้มที่จะใช้วิธีการขนาดใหญ่ (และคลาส) และฉันสงสัยว่านี่เป็นอคติที่ได้พุ่งขึ้นเพราะภาษา ตัวเอง แน่นอนฉันอาจได้อ่านรหัสผิดหรืออาจเป็นวัฒนธรรมมากกว่าปัจจัยทางเทคนิคที่นำไปสู่แนวโน้มถ้ามันมีอยู่ (สำหรับสิ่งที่คุ้มค่าฉันกำลังเขียน Objective-C และฉันใช้วิธีการเล็ก ๆ ) ขอเพิ่มเติม …

14
เราควรส่งเสริมรูปแบบการเขียนโปรแกรมเพื่อประโยชน์ของนักพัฒนาหรือไม่สนับสนุนให้สอดคล้องกัน?
นักพัฒนาเขียนif/elseบล็อกด้วยคำสั่งโค้ดหนึ่งบรรทัดเช่น: if (condition) // Do this one-line code else // Do this one-line code อีกอย่างใช้วงเล็บปีกกาสำหรับพวกเขาทั้งหมด: if (condition) { // Do this one-line code } else { // Do this one-line code } ผู้พัฒนาสร้างวัตถุขึ้นมาก่อนแล้วจึงใช้มัน HelperClass helper = new HelperClass(); helper.DoSomething(); นักพัฒนาซอฟต์แวร์สร้างอินสแตนซ์ใหม่และใช้วัตถุในหนึ่งบรรทัด: new HelperClass().DoSomething(); นักพัฒนาง่ายขึ้นด้วยอาร์เรย์และforลูป: string[] ordinals = new string[] {'First', 'Second', …

10
ลักษณะการเขียนโปรแกรมที่ดีมีความสำคัญต่อการตัดสินใจจ้างโปรแกรมเมอร์หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว แม้ในฐานะนักเรียนฉันก็ขอให้ตรวจสอบรหัสของโปรแกรมเมอร์ที่มี (ไม่) ผ่านการทดสอบ (สร้างรายการหมายเลขฟีโบนักชีบน Android) ในขณะที่ฉันเข้มงวดมากในการเข้ารหัสรูปแบบฉันเพิ่งอ่านเกี่ยวกับใครบางคน "บล็อก" สไตล์ใช้ (อ่านความคิดเห็น!) ในตำแหน่งของฉันฉันจะไม่แนะนำให้จ้างผู้ชายที่ใช้สไตล์แบบนี้ รหัสนี้ตรงกันข้ามกับรูปแบบการเข้ารหัสที่ใช้ใน บริษัท ของฉันอย่างสมบูรณ์ ในขณะที่ค้นหาสไตล์การเขียนโปรแกรมและวิธีการจัดการกับการขาดมันฉันอยากรู้เกี่ยวกับสิ่งหนึ่ง: ฉันควรจ้างผู้ชายที่จะมีปัญหาร้ายแรง ปรับรูปแบบการเข้ารหัสที่ใช้ใน บริษัท ? กรุณา: นี่ไม่ควรเป็นการอภิปรายเกี่ยวกับรูปแบบการเข้ารหัสโดยทั่วไปและดีกว่า มันเกี่ยวกับความสำคัญของรูปแบบการเข้ารหัสสำหรับการตัดสินใจจ้างใครบางคน! ข้อมูลมากกว่านี้: ฉันไม่ใช่คนที่ตัดสินใจได้ฉันแค่ให้ความเห็นตามรหัส คนที่แต่งตัวประหลาดต้องผ่านการสัมภาษณ์ที่หัวของเราตรวจสอบสิ่งที่อ่อนนุ่มทักษะ หากเขาผ่านสิ่งนี้ไปเขาจะต้องผ่านการทดสอบทักษะเล็ก ๆ น้อย ๆ ของเราและนั่นคือที่บางครั้งฉันถูกขอให้ตรวจสอบรหัสที่เขียน ฉันไม่ได้อยู่ในตำแหน่งที่จะบอกว่าใช่หรือไม่ ฉันแค่ต้องการทราบว่ารูปแบบการเข้ารหัสที่สำคัญสำหรับการตรวจสอบของฉัน ...

6
มลพิษที่ "ใช้ namespace" คืออะไร?
ฉันกำลังดูคู่มือการเขียนโค้ดของ Google [ที่นี่]และพวกเขาไม่แนะนำให้ใช้using namespaceหรือnamespace::function- ถ้าฉันไม่ได้ตีความผิด สิ่งนี้ใช้ได้กับstdเช่นกันหรือไม่? cout<<ไม่ทำงานหากไม่มีมัน หนังสือเล่มนี้แนะนำเหมือนกัน ดังนั้นฉันจะไปเกี่ยวกับการใช้cout<<โดยไม่ต้องusing namespace std;หรือstd::cout<<อย่างไร วิธีที่แนะนำคืออะไร? std::cout<<? หนังสือเรียน c ++ ส่วนใหญ่สอนผู้เริ่มต้นด้วยusing namespace std;พวกเขาเผยแพร่วิธีการเข้ารหัสที่ไม่ดีหรือไม่?
15 c++  coding-style 

6
Clean Code - ฉันควรเปลี่ยน 1 ตัวอักษรเป็นค่าคงที่หรือไม่
เพื่อหลีกเลี่ยงตัวเลขเวทย์มนตร์เรามักได้ยินว่าเราควรให้ชื่อที่มีความหมายตามตัวอักษร เช่น: //THIS CODE COMES FROM THE CLEAN CODE BOOK for (int j = 0; j < 34; j++) { s += (t[j] * 4) / 5; } -------------------- Change to -------------------- int realDaysPerIdealDay = 4; const int WORK_DAYS_PER_WEEK = 5; int sum = 0; for (int j = 0; …

5
สไตล์การเข้ารหัส OOP: เริ่มต้นทุกอย่างบนตัวสร้างหรือไม่
ฉันยังคิดว่าตัวเองเป็นโปรแกรมเมอร์ฝึกงานดังนั้นฉันมักจะมองหาวิธีที่ "ดีกว่า" สำหรับการเขียนโปรแกรมทั่วไป วันนี้เพื่อนร่วมงานของฉันแย้งว่าสไตล์การเขียนรหัสของฉันทำงานได้โดยไม่จำเป็นและฉันต้องการฟังความคิดเห็นจากผู้อื่น โดยทั่วไปเมื่อฉันออกแบบคลาสในภาษา OOP (โดยทั่วไปคือ C ++ หรือ Python) ฉันจะแยกการกำหนดค่าเริ่มต้นออกเป็นสองส่วน: class MyClass1 { public: Myclass1(type1 arg1, type2 arg2, type3 arg3); initMyClass1(); private: type1 param1; type2 param2; type3 param3; type4 anotherParam1; }; // Only the direct assignments from the input arguments are done in the constructor MyClass1::myClass1(type1 arg1, type2 …

2
ตอนนี้ไม่ใช่ว่าการประกาศเมธอดทั้งหมดใน Java Interface นั้นเป็นนามธรรมสาธารณะควรจะประกาศเมธอดด้วยตัวดัดแปลงเหล่านี้หรือไม่?
เริ่มต้นด้วย Java 8 defaultมีการนำวิธีการมาใช้ในอินเตอร์เฟส ได้อย่างมีประสิทธิภาพที่นี้หมายถึงว่าไม่ทุกวิธีการในการให้มีinterfaceabstract เริ่มต้นด้วย Java 9 (อาจ) privateวิธีการจะได้รับอนุญาต ซึ่งหมายความว่าไม่ทุกวิธีการในการให้มีinterfacepublic abstract คำถาม "ควรประกาศวิธีการในส่วนต่อประสาน Java โดยมีหรือไม่มีpublicตัวแก้ไขการเข้าถึงหรือไม่" ถูกถามที่ Stack Overflow ที่/programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m คำตอบส่วนใหญ่แย้งว่าpublic abstractไม่ควรใช้เพราะไม่มีวิธีการใดที่interfaceสามารถเป็นอย่างอื่นpublic abstractได้ นี่ไม่ใช่กรณีอีกต่อไป ดังนั้นด้วยคุณสมบัติใหม่ของอินเทอร์เฟซเหล่านี้ควรใช้public abstractคีย์เวิร์ดในการประกาศเมธอดของอินเตอร์เฟส Java หรือไม่? ในสภาพแวดล้อมเฉพาะของฉันเราจะมีคนที่มีประสบการณ์วิศวกรซอฟต์แวร์ แต่ไม่เคยมีประสบการณ์ใน Java อ่านโค้ด Java เป็นครั้งคราว ฉันรู้สึกว่าการละทิ้งpublic abstractคำหลักจะสร้างจุดสับสนเพิ่มเติมสำหรับผู้ที่ไม่คุ้นเคยกับประวัติว่าอินเตอร์เฟสมีกฎแตกต่างกันสำหรับการใช้คำหลักเหล่านี้อย่างไร

7
รหัสของฉันควรเป็น DRY หรือสามารถอ่านได้ถ้ามันไม่สามารถเป็นได้ทั้งคู่?
ฉันกำลังเขียนโค้ด Ruby สำหรับแบบฝึกหัดการเข้ารหัสอย่างง่ายและมักจะวิ่งข้ามภาวะที่กลืนไม่เข้าคายไม่ออกนี้ (การออกกำลังกายเป็นตัวเลขเข้ารหัสถ้าคุณต้องรู้) มันเป็นคำถามว่าฉันควรวางตรรกะของฉันด้วยตัวแปรอธิบายและประโยคคำสั่งขั้นตอนเดียวที่ทำให้ฟังก์ชั่นอ่านได้ง่ายกว่าข้อความที่กระชับแม้กระทั่งข้อความที่หนาแน่นที่กำจัดการซ้ำซ้อนและ / หรือลดโอกาสการเกิดข้อผิดพลาดให้น้อยที่สุด ตัวอย่างล่าสุดของฉัน: โปรแกรมของฉันรับอินพุตและเนื่องจากแนวทางการจัดรูปแบบที่เข้มงวดจึงสามารถกำหนดได้อย่างง่ายดายว่าอินพุตควรถูกเข้ารหัสหรือถอดรหัส เพื่อลดความซับซ้อนเมื่อคีย์การเข้ารหัสและข้อความถูกแปลง / สร้างให้เข้ากันได้มันเป็นเรื่องของการลบคีย์ออกจากข้อความที่เข้ารหัสหรือเพิ่มคีย์ในข้อความที่ไม่ได้เข้ารหัสเพื่อให้ได้ผลลัพธ์ที่ต้องการ (คิดว่าคีย์เป็นการเข้ารหัส ข้อความ + การเข้ารหัส = รหัส; รหัส - การเข้ารหัส = ข้อความ) ตำแหน่ง DRY บอกกับฉันว่าฉันควรแปลงข้อความที่เข้ารหัสของฉันแตกต่างจากข้อความที่ไม่ได้เข้ารหัสของฉันเพื่อให้ฟังก์ชั่นที่ใช้รหัสการเข้ารหัสและนำไปใช้กับข้อความที่ไม่จำเป็นต้องแยกแยะ ฉันพบว่าสิ่งนี้หมายความว่าฉันต้องการบางอย่างซ้อนกันถ้างบในฟังก์ชั่น แต่ตรรกะดูเหมือนจะเป็นของแข็ง อย่างไรก็ตามรหัสนี้ไม่สามารถอ่านได้ง่าย ในทางกลับกันฉันสามารถเขียนฟังก์ชั่นที่แตกต่างกันสองอย่างที่เรียกว่าตามแฟล็กที่ตั้งค่าเมื่อแอปพลิเคชันกำหนดการเข้ารหัสหรือถอดรหัส สิ่งนี้จะง่ายต่อการอ่าน แต่จะทำซ้ำฟังก์ชั่นระดับสูงของการใช้คีย์การเข้ารหัสกับข้อความ (ทำให้มันถูกเข้ารหัสหรือถอดรหัส) ฉันควรพิงรหัสที่อ่านได้หรือรหัสสั้น ๆ ได้หรือไม่ หรือฉันพลาดวิธีอื่นในการรับฟังก์ชั่นนี้และตอบสนองหลักการทั้งสอง เป็นตำแหน่งในระดับที่ต้องพิจารณาวัตถุประสงค์ของโครงการและทำการตัดสินใจที่ดีที่สุดเพื่อตอบสนองวัตถุประสงค์นั้นหรือไม่ จนถึงตอนนี้ฉันมักจะเน้นรหัสรัดกุมมากกว่ารหัสที่อ่านได้

3
ควรใช้ typedef เมื่อใด
ฉันสับสนเล็กน้อยเกี่ยวกับว่าและเมื่อไรฉันควรใช้ typedef ใน C ++ ฉันรู้สึกว่าเป็นการสร้างสมดุลระหว่างการอ่านและความชัดเจน นี่คือตัวอย่างโค้ดโดยไม่มีการพิมพ์ใด ๆ : int sum(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last) { static std::map<std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator>, int> lookup_table; std::map<std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator>, int>::iterator lookup_it = lookup_table.find(lookup_key); if (lookup_it != lookup_table.end()) return lookup_it->second; ... } IMO ที่น่าเกลียดทีเดียว ดังนั้นฉันจะเพิ่ม typedefs ภายในฟังก์ชันเพื่อให้ดูดีขึ้น: int sum(std::vector<int>::const_iterator first, std::vector<int>::const_iterator last) { typedef std::tuple<std::vector<int>::const_iterator, std::vector<int>::const_iterator> Lookup_key; typedef …
14 c++  coding-style 

7
การป้องกันสำหรับสำเร็จรูป?
สำหรับฉันแล้วรหัสสำเร็จรูปนั้นแย่มาก อย่างไรก็ตามฉันได้พบกับนักพัฒนาที่แสดงความต้านทานในความพยายามใด ๆ เพื่อลดสำเร็จรูป ฉันรู้ว่าฉันไม่ได้มีรูปแบบที่พร้อมและคิดว่าการโต้แย้งที่ผ่านมาความเกลียดชังที่ฉันได้พัฒนามันเมื่อเวลาผ่านไป เพื่อที่ฉันจะได้สร้างข้อโต้แย้งที่น่าเชื่อถือสำหรับการสร้างหม้อไอน้ำให้น้อยลง กล่าวอีกนัยหนึ่งคืออะไรข้อโต้แย้ง (ถ้ามี) ในความโปรดปรานของสำเร็จรูป? (ฉันหมายถึงสิ่งที่ฉันคิดว่ามีความหมายโดยทั่วไปโดยสำเร็จรูป แต่ตัวอย่างที่ดีคือ getters และ setters ใน Java.)

7
วิธีจัดการกับสไตล์การเขียนโปรแกรมที่แตกต่างกันในทีม?
เรามีทีมนักพัฒนาเล็ก ๆ (เพียง 3 นักพัฒนา) และเราเพิ่งได้สมาชิกใหม่ของทีม ในขณะที่เขาเป็นสมาร์ทโคดเดอร์สไตล์การเขียนรหัสของเขานั้นแตกต่างจากของเราอย่างสิ้นเชิง ฐานรหัสที่มีอยู่ของเราส่วนใหญ่มีรหัสที่สามารถอ่านได้ทำความสะอาดและบำรุงรักษาได้ แต่สมาชิกทีมใหม่กำลังเปลี่ยนแปลงไฟล์จำนวนมากอย่างรวดเร็วแนะนำแฮ็กและทางลัดที่น่าเกลียดโดยใช้กำหนดทั่วทุกสถานที่เพิ่มฟังก์ชั่นผิด คำถามของฉันคือถ้าคนอื่นเคยประสบกับสถานการณ์เช่นนี้มาก่อนและถ้าใครมีเคล็ดลับในการพูดคุยกับเขา

5
เหตุใดฉันจึงเห็นโครงสร้าง (;;) มากมาย [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา สำหรับวิธีคิดของฉัน a สำหรับลูปถูกใช้เพื่อวนซ้ำในช่วงที่รู้จักหรือกำหนดได้ String[] names = //something; for ( int i = 0; i < names.length; i++ ) { //do stuff } ซึ่งเทียบเท่า (การกำหนดขอบเขตของฉันออกไป) เพื่อ: String[] names = //something; int i = 0; while (i < names.length ) { // do stuff …

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