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

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

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

5
ใน Java ฉันควรใช้ "final" สำหรับพารามิเตอร์และ locals แม้ว่าฉันไม่จำเป็นต้อง?
Java อนุญาตให้ทำเครื่องหมายตัวแปร (ฟิลด์ / โลแคล / พารามิเตอร์) เป็นfinalเพื่อป้องกันการกำหนดใหม่ ฉันพบว่ามันมีประโยชน์มากกับฟิลด์เนื่องจากมันช่วยให้ฉันดูได้อย่างรวดเร็วว่าคุณลักษณะบางอย่างหรือทั้งคลาสนั้นมีจุดมุ่งหมายที่ไม่เปลี่ยนรูป ในทางกลับกันฉันพบว่ามันมีประโยชน์น้อยกว่ามากกับคนในท้องถิ่นและพารามิเตอร์และฉันมักจะหลีกเลี่ยงการทำเครื่องหมายว่าfinalแม้ว่าพวกเขาจะไม่ได้รับการมอบหมายซ้ำอีกครั้ง (ยกเว้นอย่างชัดเจนเมื่อพวกเขาต้องการใช้ในชั้นเรียน) . อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันใช้รหัสที่ใช้ขั้นสุดท้ายเมื่อใดก็ตามที่ทำได้ซึ่งฉันเดาว่าจะให้ข้อมูลเพิ่มเติมในทางเทคนิค ไม่มั่นใจเกี่ยวกับรูปแบบการเขียนโปรแกรมของฉันอีกต่อไปฉันสงสัยว่าอะไรคือข้อดีและข้อเสียอื่น ๆ ของการใช้finalที่ใดก็ได้ลักษณะอุตสาหกรรมที่พบบ่อยที่สุดคืออะไรและเพราะเหตุใด
105 java  coding-style  final 

11
คำสั่ง“ goto” ของแมลงชนิดใดที่นำไปสู่ มีตัวอย่างที่สำคัญทางประวัติศาสตร์หรือไม่?
ฉันเข้าใจว่าช่วยไม่ให้ลูปซ้อนกันในลูป gotoคำสั่งบ่ายเบี่ยงและประจานว่าเป็นข้อผิดพลาดสไตล์แนวโน้มของการเขียนโปรแกรมเพื่อไม่เคยถูกนำมาใช้ Alt Text: "Neal Stephenson คิดว่ามันน่ารักที่จะตั้งชื่อป้ายกำกับ 'dengo' ของเขา" ดูการ์ตูนต้นฉบับที่: http://xkcd.com/292/ เพราะฉันเรียนรู้สิ่งนี้ก่อน ฉันไม่ได้มีความเข้าใจอย่างถ่องแท้หรือประสบการณ์เกี่ยวกับข้อผิดพลาดประเภทใดที่gotoนำไปสู่ ดังนั้นสิ่งที่เรากำลังพูดถึงที่นี่: ความไม่แน่นอน? รหัสที่ไม่สามารถเข้าใจได้หรืออ่านไม่ได้? ช่องโหว่ด้านความปลอดภัย? มีอะไรอีกบ้าง? ข้อผิดพลาดประเภทใดที่ทำให้ข้อความ "goto" นำไปสู่ มีตัวอย่างที่สำคัญทางประวัติศาสตร์หรือไม่?

10
ฉันควรทำตามรูปแบบการเข้ารหัสที่ไม่ดีเพียงเพื่อปฏิบัติตามอนุสัญญาที่จัดตั้งขึ้นในสถานที่ทำงานของฉันหรือไม่
ฉันทำงานที่งานของฉันประมาณหนึ่งปี ฉันทำงานเป็นหลักในอินเทอร์เฟซ GUI ของเราซึ่งใช้วิธีการจากแบ็กเอนด์ C แต่โดยทั่วไปฉันไม่ต้องจัดการกับพวกเขายกเว้นค่าตอบแทน GUI ของเรามีโครงสร้างที่ค่อนข้างสมเหตุสมผลโดยมีข้อ จำกัด ของเรา ฉันได้รับมอบหมายให้เพิ่มฟังก์ชั่นในส่วนบรรทัดคำสั่งของโปรแกรม ฟังก์ชั่นเหล่านี้ส่วนใหญ่มีความยาว 300 บรรทัดและใช้งานยาก ฉันพยายามรวบรวมชิ้นส่วนเหล่านั้นเพื่อรับข้อมูลสัญญาณเตือนเฉพาะและฉันมีปัญหาในการจัดการ ฉันรู้ว่าฉันกำลังทำการทดสอบที่ซับซ้อนมากขึ้นด้วยการทำมันในฟังก์ชั่นยาว ๆ ฉันควรเก็บทุกอย่างไว้ในฟังก์ชั่นขนาดใหญ่ตามสไตล์ของฟังก์ชั่นที่มีอยู่หรือฉันควรสรุปแคปปลุกในฟังก์ชั่นของตัวเองหรือไม่? ฉันไม่แน่ใจว่าเหมาะสมหรือไม่ที่จะขัดกับอนุสัญญาการเข้ารหัสปัจจุบันหรือว่าฉันควรกัดสัญลักษณ์แสดงหัวข้อย่อยและทำให้รหัสสับสนมากขึ้นสำหรับฉันในการเขียน โดยสรุปฉันกำลังเปรียบเทียบ showAlarms(){ // tons of code } ต่อต้าน showAlarms(){ alarm1(); alarm2(); return; } alarm1(){ ... printf(...); return; } แก้ไข: ขอบคุณสำหรับคำแนะนำทุกคนฉันตัดสินใจว่าฉันจะออกแบบรหัสของฉันเป็นตัวประกอบและจากนั้นถามสิ่งที่พวกเขาต้องการและถ้าพวกเขาต้องการมันทั้งหมดในที่เดียวฉันสามารถตัดจากรหัสตัวประกอบของฉันและเปลี่ยนกลับเป็น 1 ฟังก์ชั่นใหญ่ นี่ควรให้ฉันเขียนและทดสอบได้ง่ายขึ้นแม้ว่าพวกเขาต้องการรหัสทั้งหมดในคำจำกัดความเดียว UPDATE: พวกเขาจบลงด้วยความสุขกับรหัสที่แยกเป็นสัดส่วนและมีคนมากกว่าหนึ่งคนที่ขอบคุณฉันสำหรับการตั้งค่าแบบอย่างนี้

14
ช่วงเวลาสั้น ๆ ที่ไม่ได้เป็นคุณธรรมอีกต่อไปคืออะไร?
การแก้ไขข้อผิดพลาดเมื่อเร็ว ๆ นี้ทำให้ฉันต้องใช้รหัสที่เขียนโดยสมาชิกในทีมคนอื่นซึ่งฉันพบสิ่งนี้ (เป็น C #) return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; ตอนนี้การอนุญาตให้มีเหตุผลที่ดีสำหรับการปลดเปลื้องเหล่านี้ยังคงเป็นเรื่องยากมากที่จะติดตาม มีข้อบกพร่องเล็กน้อยในการคำนวณและฉันต้องแก้ให้หายยุ่งเพื่อแก้ไขปัญหา ฉันรู้ว่ารูปแบบการเขียนโค้ดของบุคคลนี้จากการตรวจสอบโค้ดและวิธีการของเขาก็คือสั้นกว่านั้นเกือบจะดีกว่าเสมอ และแน่นอนว่ามันมีคุณค่าอยู่ที่นั่น: เราทุกคนได้เห็นกลุ่มของตรรกะที่มีเงื่อนไขที่ซับซ้อนโดยไม่จำเป็น แต่เขาเก่งกว่าฉันมากในตอนต่อไปของเครือข่ายผู้ประกอบการที่อัดแน่นไปด้วยคำพูดเดียว แน่นอนว่านี่เป็นเรื่องของสไตล์ แต่มีอะไรที่เขียนหรือค้นคว้าเกี่ยวกับการตระหนักถึงจุดที่ความพยายามในการกระชับรหัสหยุดที่มีประโยชน์และกลายเป็นอุปสรรคต่อความเข้าใจ? สาเหตุของการปลดเปลื้องคือ Entity Framework db จำเป็นต้องเก็บสิ่งเหล่านี้เป็นชนิดที่ไม่สามารถใช้ได้ ทศนิยม? ไม่เทียบเท่ากับทศนิยมใน C # และจำเป็นต้องร่าย

16
ประโยชน์ของการไม่ใช้สัญกรณ์ฮังการีคืออะไร
หนึ่งในสิ่งที่ฉันต่อสู้คือไม่ได้ใช้สัญกรณ์ฮังการี ฉันไม่ต้องการที่จะไปที่คำนิยามตัวแปรเพียงเพื่อดูว่ามันคืออะไร เมื่อโปรเจ็กต์ขยายขอบเขตมันก็ดีที่สามารถดูตัวแปรนำหน้าด้วย 'บูล' และรู้ว่ามันกำลังมองหาจริง / เท็จแทนที่จะเป็นค่า0/1 ฉันทำงานหนักมากใน SQL Server ฉันเติมคำนำหน้ากระบวนงานที่เก็บไว้ด้วย 'sp' และตารางของฉันด้วย 'tbl' ไม่ต้องพูดถึงตัวแปรทั้งหมดของฉันในฐานข้อมูลตามลำดับ ฉันเห็นทุกที่ที่ไม่มีใครต้องการใช้สัญกรณ์ฮังการีถึงจุดที่พวกเขาหลีกเลี่ยง คำถามของฉันคืออะไรประโยชน์ของการไม่ใช้สัญกรณ์ฮังการีและทำไมนักพัฒนาส่วนใหญ่จึงหลีกเลี่ยงปัญหาเช่นภัยพิบัติ

14
ฉันควรใช้วงเล็บในคำสั่งทางตรรกะแม้ว่าไม่จำเป็น?
สมมติว่าผมมีสภาพบูลีนa AND b OR c AND dและฉันใช้ภาษาที่มีการสั่งซื้อที่สูงขึ้นของแบบอย่างการดำเนินงานกว่าAND ORฉันสามารถเขียนรหัสบรรทัดนี้: If (a AND b) OR (c AND d) Then ... แต่จริงๆแล้วมันเทียบเท่ากับ: If a AND b OR c AND d Then ... มีข้อโต้แย้งใด ๆ ในหรือต่อต้านรวมถึงวงเล็บนอก? ประสบการณ์ภาคปฏิบัติแนะนำว่ามันคุ้มค่าหรือไม่ที่จะต้องอ่านให้เข้าใจ หรือมันเป็นสัญญาณว่านักพัฒนาต้องการนั่งลงและมั่นใจในพื้นฐานของภาษาของพวกเขา?

13
เราควรกำจัดตัวแปรท้องถิ่นถ้าทำได้หรือไม่?
ตัวอย่างเช่นเพื่อให้ซีพียูยังคงอยู่ใน Android ฉันสามารถใช้รหัสเช่นนี้: PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc"); wakeLock.acquire(); แต่ฉันคิดว่าตัวแปรท้องถิ่นpowerManagerและwakeLockสามารถกำจัดได้: ((PowerManager)getSystemService(POWER_SERVICE)) .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag") .acquire(); ฉากที่คล้ายกันจะปรากฏในมุมมองการแจ้งเตือนของ iOS เช่นจาก UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; [alert show]; -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ [alertView release]; } ไปที่: [[[UIAlertView alloc] initWithTitle:@"my title" message:@"my message" delegate:nil cancelButtonTitle:@"ok" …

10
มี / ทุกคนสามารถท้าทายลุงบ๊อบบนความรักของเขาในการลบ“ วงเล็บปีกกาที่ไร้ประโยชน์” หรือไม่?
ฉันเกลียดการอ้างอิงเนื้อหาที่ชำระเงินแล้ว แต่วิดีโอนี้แสดงสิ่งที่ฉันกำลังพูดถึง 12 นาทีอย่างแม่นยำใน Robert Martin ดูที่นี่: และกล่าวว่า "หนึ่งในสิ่งที่ฉันชอบทำคือกำจัดวงเล็บปีกกาที่ไร้ประโยชน์" เมื่อเขาเปลี่ยนมันเป็นสิ่งนี้: เมื่อนานมาแล้วในการศึกษาที่อยู่ห่างไกลฉันถูกสอนว่าอย่าทำเช่นนี้เพราะมันทำให้มันง่ายที่จะแนะนำข้อผิดพลาดโดยการเพิ่มอีกบรรทัดเยื้องคิดว่ามันถูกควบคุมโดยifเมื่อมันไม่ได้ เพื่อความเป็นธรรมกับลุงบ๊อบเขาได้ทำการปรับเปลี่ยนวิธีการจาวาแบบยาวลงไปสู่ฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่ผมเห็นว่าสามารถอ่านได้ง่ายขึ้น เมื่อเขาเปลี่ยนมันเสร็จ (22.18) ดูเหมือนว่า: ฉันสงสัยว่าควรจะตรวจสอบการลบวงเล็บหรือไม่ ฉันคุ้นเคยกับแนวทางปฏิบัติที่ดีที่สุดแล้ว ลุงบ๊อบจะถูกท้าทายในประเด็นนี้หรือไม่? ลุงบ๊อบปกป้องความคิดนี้หรือไม่?

2
เกิดอะไรขึ้นกับการนำเข้าที่สัมพันธ์กันใน Python
ฉันเพิ่งอัพเกรดpylintเวอร์ชั่นตัวตรวจสอบ Python สไตล์ยอดนิยม มันเกิดขึ้นอย่างรวดเร็วในรหัสของฉันชี้สถานที่ที่ฉันนำเข้าโมดูลในแพ็คเกจเดียวกันโดยไม่ต้องระบุเส้นทางของแพ็คเกจทั้งหมด ข้อความแสดงข้อผิดพลาดใหม่คือ W0403 W0403: การนำเข้าสัมพัทธ์% r ควรเป็น% r ใช้เมื่อตรวจพบการนำเข้าที่สัมพันธ์กับไดเรกทอรีแพ็คเกจ ตัวอย่าง ตัวอย่างเช่นถ้าแพ็คเกจของฉันมีโครงสร้างแบบนี้: /cake /__init__.py /icing.py /sponge.py /drink และในแพ็คเกจฟองน้ำฉันเขียน: import icing แทน import cake.icing ฉันจะได้รับข้อผิดพลาดนี้ ในขณะที่ฉันเข้าใจว่าไม่ใช่ข้อความ Pylint ทั้งหมดที่มีความสำคัญเท่ากันและฉันไม่กลัวที่จะยกเลิกข้อความเหล่านั้น แต่ฉันไม่เข้าใจว่าทำไมการฝึกเช่นนี้จึงถือเป็นแนวคิดที่ไม่ดี ฉันหวังว่าบางคนสามารถอธิบายข้อผิดพลาดได้ดังนั้นฉันจึงสามารถปรับปรุงรูปแบบการเขียนรหัสได้มากกว่า (อย่างที่ฉันวางแผนจะทำในปัจจุบัน) ปิดการเตือนที่น่าเกรงขามนี้

20
การลดจำนวนบรรทัดในโค้ดมีความสำคัญอย่างไร
ฉันเป็นนักพัฒนาซอฟต์แวร์ที่ทำงานกับ J2SE (core java) บ่อยครั้งในระหว่างการตรวจสอบรหัสของเราเราถูกขอให้ลดจำนวนบรรทัดในรหัสของเรา มันไม่เกี่ยวกับการลบรหัสที่ซ้ำซ้อนมันเกี่ยวกับการติดตามสไตล์ที่เน้นการทำสิ่งเดียวกันโดยมีบรรทัดน้อยลงในรหัสในขณะที่ฉันเชื่อว่าการมีความชัดเจนในโค้ดแม้ว่ามันจะหมายถึงการเพิ่มจำนวนบรรทัด คุณคิดว่าเป็นวิธีที่ถูกต้องในการทำสิ่งต่าง ๆ ? หาก LOC (บรรทัดของรหัส) มีจำนวนน้อยจะมีผลกับรหัสอย่างไร หาก LOC เป็นจำนวนที่มากกว่าจะมีผลกับรหัสอย่างไร ตัวอย่างจากเว็บไซต์: "javaranch" - public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) { …

22
แท็บกับช่องว่าง - ลักษณะการย่อหน้าที่เหมาะสมสำหรับทุกสิ่งในทุกสถานการณ์เป็นเท่าไหร่? [ปิด]
มาตรฐานการเข้ารหัสสำหรับรหัสที่โฮสต์ใน drupal.org แนะนำให้ใช้ช่องว่างสองช่องเพื่อเยื้องรหัส ไซต์อื่น ๆ แนะนำให้ใช้แท็บเพื่อเยื้องรหัส อักขระการเยื้องที่เหมาะสมสำหรับทุกสิ่งคืออะไรและในทุกสถานการณ์? โปรดอธิบายคำตอบที่คุณให้

12
ข้อเสียของแท็บสต๊อปยืดหยุ่นคืออะไร [ปิด]
ดูที่นี่: สงครามศักดิ์สิทธิ์ทั่วไปบนแท็บ VS ช่องว่าง ตอนนี้ดูที่นี่: tabstops ยืดหยุ่น แก้ไขปัญหาทั้งหมดแล้วและเพิ่มพฤติกรรมใหม่ ๆ ที่มีประโยชน์มากมาย แท็บที่ยืดได้พูดถึงแม้ในแท็บนั้นเทียบกับการอภิปรายช่องว่างหรือไม่ ทำไมจะไม่ล่ะ? มีข้อเสียของแนวคิด tabstop ยืดหยุ่นอย่างจริงจังว่าไม่มีใครเคยใช้พวกเขาในการแก้ไขที่นิยม? แก้ไข : ฉันขอโทษที่ให้ความสำคัญกับ "ทำไมพวกเขาถึงไม่พูด" นั่นไม่ใช่สิ่งที่ฉันตั้งใจจริงๆ ว่าคำถามคืออาจเป็นไปได้ปิดหัวข้อ สิ่งที่ฉันหมายถึงจริงๆคืออะไรข้อเสียที่ใหญ่ที่สุดของสิ่งนี้ที่ป้องกันไม่ให้มีการใช้ความคิดที่เป็นประโยชน์อย่างเห็นได้ชัด? (ในโลกอุดมคติที่ทุกสิ่งรองรับแล้ว) (ปรากฎว่ามีคำขอใน Microsoft Connect สำหรับการใช้งาน Visual Studio ของแท็บที่ยืดหยุ่นและคำขอใน Eclipseด้วยเช่นกันนอกจากนี้ยังมีคำถามที่ถามเกี่ยวกับตัวแก้ไขอื่น ๆ ที่ใช้แท็บที่ยืดหยุ่น )

9
หากคุณส่งข้อมูลขั้นต่ำเปล่าไปยังฟังก์ชั่นในกรณีเช่นนี้เสมอ
สมมติว่าฉันมีฟังก์ชั่นIsAdminที่จะตรวจสอบว่าผู้ใช้เป็นผู้ดูแลระบบหรือไม่ สมมติว่าการตรวจสอบของผู้ดูแลระบบทำได้โดยการจับคู่ id ผู้ใช้ชื่อและรหัสผ่านกับกฎบางประเภท (ไม่สำคัญ) ในหัวของฉันมีสองลายเซ็นฟังก์ชันที่เป็นไปได้สำหรับสิ่งนี้: public bool IsAdmin(User user); public bool IsAdmin(int id, string name, string password); ฉันมักจะไปที่ลายเซ็นประเภทที่สองโดยคิดว่า: ฟังก์ชั่นลายเซ็นช่วยให้ผู้อ่านมีข้อมูลมากขึ้น ตรรกะที่มีอยู่ในฟังก์ชั่นไม่จำเป็นต้องรู้เกี่ยวกับUserชั้นเรียน มันมักจะส่งผลให้รหัสน้อยลงเล็กน้อยภายในฟังก์ชั่น อย่างไรก็ตามบางครั้งฉันก็ตั้งคำถามกับวิธีการนี้และก็ตระหนักว่าในบางจุดมันจะกลายเป็นเรื่องไม่สะดวก หากตัวอย่างฟังก์ชั่นจะแมประหว่างเขตข้อมูลวัตถุที่แตกต่างกันสิบแห่งในบูลผลลัพธ์ผมจะส่งวัตถุทั้งหมดอย่างชัดเจน แต่นอกเหนือจากตัวอย่างที่สิ้นเชิงเช่นนั้นฉันไม่เห็นเหตุผลที่จะผ่านในวัตถุจริง ฉันขอขอบคุณข้อโต้แย้งสำหรับสไตล์ใดสไตล์หนึ่งรวมถึงข้อสังเกตทั่วไปที่คุณอาจเสนอ ฉันเขียนโปรแกรมทั้งในรูปแบบเชิงวัตถุและสไตล์การใช้งานดังนั้นจึงควรมองคำถามว่าเกี่ยวกับสำนวนใด ๆ และทั้งหมด

6
คำพูดเดี่ยวเทียบกับเครื่องหมายคำพูดคู่ [ปิด]
ฉันเพิ่งเริ่มงานที่ฉันเขียน Python หลังจากมาจากพื้นหลัง Java และฉันสังเกตเห็นว่านักพัฒนารายอื่นมักจะพูดสตริงโดยใช้เครื่องหมายคำพูดเดี่ยว ( '') แทนที่จะเป็นเครื่องหมายคำพูดคู่ ( "") ตัวอย่างเช่น: line1 = 'This is how strings typically look.' line2 = "Not like this." มีเหตุผลใดที่นอกเหนือไปจากความชอบส่วนตัวหรือไม่? นี่เป็นวิธีที่เหมาะสมในการอ้างอิงสตริงหรือไม่ โดยเฉพาะสิ่งที่ฉันต้องการทราบคือหากมีมาตรฐานบางประเภทหรือวิธีปฏิบัติที่ดีที่สุดที่ยอมรับได้ซึ่งผลักดันรูปแบบการเข้ารหัสนี้

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