คำถามติดแท็ก programming-practices

Programming Practices เป็นวิธีที่ใช้กันทั่วไปหรือไม่ใช้กันทั่วไปในการพัฒนาซอฟต์แวร์ สิ่งเหล่านี้อาจรวมถึงสิ่งต่าง ๆ เช่นการพัฒนาแบบ Agile, Kanban, ทางลัดการเข้ารหัส ฯลฯ

7
การประเมินการลัดวงจรมันเป็นการปฏิบัติที่ไม่ดีเหรอ?
สิ่งที่ฉันรู้จักมาระยะหนึ่ง แต่ไม่เคยพิจารณามาก่อนคือภาษาส่วนใหญ่มีความเป็นไปได้ที่จะให้ความสำคัญกับผู้ประกอบการในคำสั่ง if ตามคำสั่งของพวกเขา ฉันมักจะใช้สิ่งนี้เป็นวิธีในการป้องกันข้อยกเว้นอ้างอิงเป็นโมฆะเช่น: if (smartphone != null && smartphone.GetSignal() > 50) { // Do stuff } ในกรณีนี้รหัสจะส่งผลในการตรวจสอบครั้งแรกว่าวัตถุไม่เป็นโมฆะและจากนั้นใช้วัตถุนี้รู้ว่ามันมีอยู่ ภาษานั้นฉลาดเพราะรู้ว่าถ้าคำสั่งแรกถ้าเป็นเท็จก็ไม่มีประโยชน์ที่จะประเมินคำสั่งที่สองและดังนั้นจึงไม่มีข้อยกเว้นการอ้างอิงโมฆะ สิ่งนี้ใช้งานได้เหมือนกันสำหรับตัวดำเนินการandและor สิ่งนี้มีประโยชน์ในสถานการณ์อื่น ๆ เช่นการตรวจสอบว่าดัชนีอยู่ในขอบเขตของอาเรย์และเทคนิคดังกล่าวสามารถทำได้ในหลายภาษาตามความรู้ของฉัน: Java, C #, C ++, Python และ Matlab คำถามของฉันคือ: รหัสประเภทนี้เป็นตัวแทนของการปฏิบัติที่ไม่ดีหรือไม่? การปฏิบัติที่ไม่ดีนี้เกิดขึ้นจากปัญหาทางเทคนิคที่ซ่อนอยู่หรือไม่ (เช่นนี้อาจส่งผลให้เกิดข้อผิดพลาด) หรือนำไปสู่ปัญหาความสามารถในการอ่านสำหรับโปรแกรมเมอร์อื่น ๆ หรือไม่? มันอาจสร้างความสับสนได้ไหม

9
การพัฒนาความคิดมากกว่า
ฉันทำงานเป็นนักพัฒนาแอพมาเป็นเวลาหนึ่งปีครึ่งแล้ว (ไม่นานฉันก็รู้) และฉันเพิ่งได้รับโครงการใหญ่ครั้งแรกของฉัน ไม่จำเป็นต้องบอกว่ามันไม่ได้ราบรื่นมากดังนั้นฉันจึงขอคำแนะนำจากโปรแกรมเมอร์อาวุโสที่เกี่ยวข้องในโครงการเกี่ยวกับวิธีการเข้าถึง เขาบอกว่าฉันคิดมากที่จะทำภารกิจนี้และเพราะฉันไม่เคยจัดการโครงการขนาดนี้ก่อนที่ฉันจะใช้เวลามากเกินไปในการคิดรูปแบบการออกแบบ ในคำพูดที่ฉลาดของเขาเขาบอกฉันว่า "F * ck อนาคตสร้างเพื่อตอนนี้" นี่คือโปรแกรมเมอร์ทั่วไปที่ตามมาเมื่อทำโครงการเช่นนี้หรือไม่? ตัวอย่างเช่นหากคุณได้รับการขอให้พิสูจน์แบบจำลองแนวคิดมันเป็นแนวโน้มทั่วไปที่จะทำให้ตัวอย่างที่ใช้การได้ออกมาเร็วที่สุดหรือไม่? แก้ไข: เนื่องจากการถกเถียงเรื่องนี้เป็นประกายฉันอยากจะพูดถึงว่าสถานการณ์นี้รุนแรงมาก: เรามีกำหนดเวลาที่แน่นมากเนื่องจากปัจจัยที่อยู่เหนือการควบคุมของเรา (เช่นตลาดที่เราตั้งเป้าหมายไว้จะหมดความสนใจถ้าเราไม่ ไม่ต้องแสดงให้พวกเขาเห็น) และคำแนะนำของเขาพิสูจน์แล้วว่ามีประสิทธิภาพมากสำหรับงานนี้โดยเฉพาะ

3
แบ่งในกรณีเริ่มต้นในสวิตช์
ฉันเป็นบิตงงงวยในเมื่อใดก็ตามหรือไม่รวมถึงหลังจากกรณีที่ผ่านมามักจะbreakdefault switch (type) { case 'product': // Do behavior break; default: // Do default behavior break; // Is it considered to be needed? } breakมีวัตถุประสงค์เพียงอย่างเดียวในความเข้าใจของฉันที่จะหยุดรหัสจากการทำงานผ่านส่วนที่เหลือของswitch-case ก็ถือว่าเป็นตรรกะมากขึ้นแล้วจะมีbreakที่ผ่านมาเนื่องจากความสอดคล้องหรือข้ามมีมันเกิดจากการbreakใช้ไม่มีการใช้งานการทำงาน แต่อย่างใด? ทั้งสองมีเหตุผลในรูปแบบที่แตกต่างกันในความคิดของฉัน ซึ่งอาจจะได้ในระดับหนึ่งนำมาเปรียบเทียบกับตอนจบไฟล์ที่มี.php ?>ฉันไม่เคยลงท้ายด้วย?>ส่วนใหญ่เนื่องจากความเสี่ยงของการแสดงผลช่องว่าง แต่ก็สามารถยืนยันได้ว่ามันจะเป็นสิ่งตรรกะที่จะจบไฟล์ด้วย

12
โครงการของฉันต้องมีขนาดใหญ่แค่ไหนสำหรับฉันในการทดสอบหน่วย? [ปิด]
ฉันคิดว่าโครงการของฉันแยกออกจากกันมากพอที่จะอนุญาตให้ทำการทดสอบหน่วย แต่โครงการของฉันต้องมีขนาดใหญ่เพียงใดในแง่ของฟังก์ชั่นและฟังก์ชั่นการทดสอบหน่วยที่คุ้มค่า? เราทุกคนทำผิดพลาดและไม่มีใครสมบูรณ์แบบ แต่ฉันคิดว่าตัวเองเป็นโปรแกรมเมอร์ที่ดีในการจัดการข้อผิดพลาดของโครงการขนาดเล็กด้วยการก้าวผ่าน หรือหน่วยทดสอบความจำเป็นอย่างหนักไม่ว่าโครงการของคุณจะมีขนาดเท่าใด

17
ประสบการณ์ฝึกงานเชิงลบของฉันเป็นตัวแทนของโลกแห่งความจริงหรือไม่? [ปิด]
ฉันอยากรู้ว่าประสบการณ์ปัจจุบันของฉันในฐานะฝึกงานเป็นตัวแทนของอุตสาหกรรมจริงหรือไม่ ในฐานะพื้นหลังฉันผ่านส่วนที่ดีกว่าของวิชาเอกการคำนวณสองวิชาและวิชาเอกคณิตศาสตร์ที่มหาวิทยาลัยใหญ่ ฉันชอบทุกคลาสและชอบพวกเขาทั้งหมดดังนั้นฉันจึงอยากคิดว่าฉันไม่ได้เขียนโปรแกรมที่แย่มาก ฉันได้ฝึกงานกับ บริษัท ซอฟต์แวร์รายใหญ่แห่งหนึ่งและผ่านไปครึ่งทางตอนนี้ฉันรู้สึกตกใจกับคุณภาพของรหัสที่ต่ำมาก ความคิดเห็นไม่มีอยู่จริงมันเป็นรหัสสปาเก็ตตี้และทุกสิ่งที่ผิดก็ยิ่งแย่ลงไปอีก ฉันได้ทำการติว / ติวตันมาแล้วหลายครั้งฉันจึงคุ้นเคยกับการอ่านรหัสที่ไม่ดี แต่ผลิตภัณฑ์อุตสาหกรรมหลัก ๆ ที่ฉันได้เห็นนั้นมีทั้งหมด ฉันทำงานวันละ 10-12 ชั่วโมงและไม่เคยรู้สึกว่าฉันได้ทุกที่เพราะมัน ' ชั่วโมงที่ไม่มีที่สิ้นสุดของการพยายามหา API ที่ไม่มีเอกสารหรือพิจารณาพฤติกรรมของส่วนอื่น ๆ ของผลิตภัณฑ์ (ไม่มีเอกสารที่สมบูรณ์) ฉันออกจากงานที่เกลียดงานทุกวันจนถึงตอนนี้และฉันอยากรู้ว่านี่คือสิ่งที่จะเก็บไว้ตลอดชีวิตของฉันหรือไม่ ฉันได้วาดฟางสั้น ๆ ในการฝึกงาน (บัญชีเงินเดือนขนาดใหญ่ที่ไร้เหตุผลบ่งบอกว่ามันไม่ใช่ตำแหน่งที่มีคุณภาพต่ำ) หรือนี่คือสิ่งที่โลกแห่งความจริงเป็นเช่นนั้นหรือไม่?

11
การทดสอบหน่วยไม่ควรใช้วิธีการของฉันเอง?
วันนี้ฉันกำลังดูวิดีโอ "พื้นฐานJUnit " และผู้เขียนกล่าวว่าเมื่อทำการทดสอบวิธีการที่กำหนดในโปรแกรมของคุณคุณไม่ควรใช้วิธีการอื่นของคุณเองในกระบวนการ เพื่อที่จะเจาะจงมากขึ้นเขากำลังพูดถึงการทดสอบวิธีการสร้างเรกคอร์ดที่ใช้ชื่อและนามสกุลของอาร์กิวเมนต์และใช้เพื่อสร้างเรกคอร์ดในตารางที่กำหนด แต่เขาอ้างว่าในกระบวนการทดสอบวิธีนี้เขาไม่ควรใช้วิธีDAOอื่น ๆ ของเขาในการสืบค้นฐานข้อมูลเพื่อตรวจสอบผลลัพธ์สุดท้าย (เพื่อตรวจสอบว่าบันทึกถูกสร้างขึ้นจริงด้วยข้อมูลที่ถูกต้อง) เขาอ้างว่าสิ่งนั้นเขาควรเขียนรหัสJDBCเพิ่มเติมเพื่อสืบค้นฐานข้อมูลและตรวจสอบผลลัพธ์ ฉันคิดว่าฉันเข้าใจจิตวิญญาณของการอ้างสิทธิ์ของเขา: คุณไม่ต้องการให้กรณีทดสอบของวิธีใดวิธีหนึ่งขึ้นอยู่กับความถูกต้องของวิธีอื่น ๆ (ในกรณีนี้วิธี DAO) และสิ่งนี้สามารถทำได้โดยการเขียนการตรวจสอบของคุณเองอีกครั้ง / สนับสนุนรหัส (ซึ่งควรจะเฉพาะเจาะจงมากขึ้นและเพ่งความสนใจไปจึงรหัสที่ง่ายขึ้น) อย่างไรก็ตามเสียงในหัวของฉันเริ่มคัดค้านด้วยข้อโต้แย้งเช่นการทำสำเนารหัสความพยายามเพิ่มเติมที่ไม่จำเป็น ฯลฯ ฉันหมายถึงถ้าเราใช้แบตเตอรี่ทดสอบทั้งหมดและเราทดสอบวิธีสาธารณะทั้งหมดของเราอย่างละเอียด (รวมถึงวิธี DAO ในกรณีนี้) ไม่ควร ไม่เป็นไรที่จะใช้วิธีการเหล่านั้นบางอย่างขณะทดสอบวิธีอื่น ๆ หากหนึ่งในนั้นไม่ได้ทำในสิ่งที่มันควรจะเป็นกรณีทดสอบของตัวเองจะล้มเหลวและเราสามารถแก้ไขและเรียกใช้แบตเตอรี่ทดสอบอีกครั้ง ไม่จำเป็นต้องทำสำเนารหัส (แม้ว่ารหัสที่ซ้ำกันจะค่อนข้างง่ายกว่า) หรือสูญเสียความพยายาม ฉันมีความรู้สึกที่แข็งแกร่งเกี่ยวกับเรื่องนี้เนื่องจากแอปพลิเคชันExcel - VBA หลายตัวที่ฉันเขียน (ต้องผ่านการทดสอบหน่วยอย่างถูกต้องด้วยRubberduck สำหรับ VBA ) ซึ่งการใช้คำแนะนำนี้จะหมายถึงการทำงานพิเศษเพิ่มเติมจำนวนมากโดยไม่มีประโยชน์ คุณช่วยแบ่งปันความเข้าใจเกี่ยวกับเรื่องนี้ได้ไหม?

11
การเขียนโปรแกรมโดยทั่วไปกลายเป็นเรื่องง่ายต่อการอ่านเขียนและทำความเข้าใจเมื่อคุณได้รับประสบการณ์หรือไม่? [ปิด]
ฉันเป็นผู้เริ่มต้นในการเขียนโปรแกรมและฉันอ่านหนังสือศึกษาอ่านบทความและอะไรก็ตาม ฉันได้รับผลลัพธ์ที่ยอดเยี่ยมตั้งแต่ฉันเริ่มเรียนรู้การเขียนโปรแกรมและเมื่อฉันเป็นผู้เริ่มต้นฉันเคยคิดว่าฉันรู้ทุกอย่างเกี่ยวกับการเขียนโปรแกรม แต่เมื่อฉันเรียนรู้มากขึ้นฉันก็รู้ว่าฟิลด์นี้ยากแค่ไหน แต่ไม่ thats จุด). ทุกวันนี้ฉันได้เขียนซอฟต์แวร์ที่ใช้งานได้และฉันได้เรียนรู้พื้นฐานของ 3 ภาษาและฉันเป็นสื่อกลางในภาษาเดียว เมื่อฉันดูสิ่งต่าง ๆ ขั้นสูงเช่น MYSQL หรือการเขียนโปรแกรม OpenGL หรือแม้แต่รหัส Visual Studio C ++ มันทำให้ฉันปวดหัวและแม้กระทั่งการแสดงภาพซอร์สโค้ด HTML ของเว็บไซต์จำนวนมาก (ซอร์สโค้ดส่วนใหญ่บนเว็บไซต์ที่เห็นโดย Google chrome ดูเหมือนยุ่งมาก ) ทำให้ฉันสับสนถึงขีด จำกัด ของสมอง ทุกอย่างดูเรียบง่ายในตอนแรก แต่เมื่อมองไปที่สิ่งที่ก้าวหน้าเหล่านี้มันทำให้ฉันสงสัยว่าจะเรียนรู้ได้มากแค่ไหน คำถามสั้น ๆ คือถ้าสิ่งเหล่านี้กลายเป็นที่ชัดเจนกับโปรแกรมเมอร์ในขณะที่เขาก้าวหน้าในอาชีพของเขา หัวข้อที่ซับซ้อนตามที่ระบุไว้ข้างต้น (OpenGL, MySQL, ไซต์ html ขั้นสูง) กลายเป็นเรื่องง่ายต่อการอ่านเขียนและทำความเข้าใจเมื่อคุณเรียนรู้มากขึ้นหรือแค่ซับซ้อนขึ้นเมื่อคุณไป คุณจะต่อสู้กับความรู้สึกนี้ว่าคุณเป็นมดในโลกแห่งการเขียนโปรแกรมได้อย่างไร

7
รหัสแรกเทียบกับฐานข้อมูลก่อน
เมื่อฉันออกแบบและสร้างซอฟต์แวร์ที่ฉันทำงานอยู่ฉันมักจะออกแบบและสร้างตาราง SQL ส่วนหลังก่อนแล้วจึงไปยังการเขียนโปรแกรมจริง โครงการที่ฉันกำลังทำอยู่ทำให้ฉันงงงวย นี่อาจเป็นเพราะการขาดข้อกำหนดที่ดีและมั่นคง แต่น่าเสียดายที่ฉันสามารถทำได้ในครั้งนี้ มันเป็นสถานการณ์แบบ "ไปทำให้มันเกิดขึ้น" แต่ฉันเชือนแช ฉันกำลังคิดที่จะพลิกเวิร์กโฟลว์ของฉันบนหัวและสร้าง UI และคลาสโมเดลข้อมูลเป็นครั้งแรกด้วยความหวังว่าการทำงานที่ออกมาจะทำให้ฉันชัดเจนว่าสคีมาฐานข้อมูลของฉันจะเป็นอย่างไรในที่สุด นี่เป็นความคิดที่ดีหรือไม่? ฉันกังวลว่าฉันจะจบลงด้วย UI และยังไม่ทราบวิธีการจัดทำฐานข้อมูล หากใครอยากรู้ฉันกำลังใช้ SQL Server เป็นแบ็กเอนด์และ MS Access เป็นแอพพลิเคชั่นส่วนหน้า (การเข้าถึงไม่ใช่ตัวเลือกของฉันเช่นกันดังนั้นโปรดอย่าเกลียดมันแย่เกินไป)

11
เป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะแก้ไขโค้ดอย่างเคร่งครัดเพื่อการทดสอบ
ฉันมีการถกเถียงกับเพื่อนร่วมงานโปรแกรมเมอร์เกี่ยวกับว่ามันเป็นการปฏิบัติที่ดีหรือไม่ดีในการปรับเปลี่ยนรหัสการทำงานเพียงเพื่อให้สามารถทดสอบได้ (ผ่านการทดสอบหน่วยตัวอย่าง) ความคิดเห็นของฉันคือว่ามันใช้ได้ภายในขอบเขตของการบำรุงรักษาวัตถุที่ดีและการปฏิบัติด้านวิศวกรรมซอฟต์แวร์ที่แน่นอน (ไม่ใช่ "ทำให้ทุกอย่างเป็นสาธารณะ" ฯลฯ ) ความคิดเห็นของเพื่อนร่วมงานของฉันคือการแก้ไขรหัส (ใช้งานได้) เพื่อการทดสอบเท่านั้นผิด เป็นเพียงตัวอย่างง่ายๆลองนึกถึงโค้ดชิ้นนี้ที่ใช้โดยองค์ประกอบบางส่วน (เขียนใน C #): public void DoSomethingOnAllTypes() { var types = Assembly.GetExecutingAssembly().GetTypes(); foreach (var currentType in types) { // do something with this type (e.g: read it's attributes, process, etc). } } ฉันได้แนะนำว่ารหัสนี้สามารถแก้ไขเพื่อเรียกวิธีอื่นที่จะทำงานจริง: public void DoSomething(Assembly asm) { // not …

17
วิธีฝึกตัวเองให้หลีกเลี่ยงการเขียนรหัส“ ฉลาด” [ปิด]
คุณรู้หรือไม่ว่าความรู้สึกนั้นเมื่อคุณต้องการที่จะแสดงให้เห็นถึงเคล็ดลับใหม่ที่มีExpressions หรือวางแนวทางที่แตกต่างกันสามขั้นตอน? สิ่งนี้ไม่จำเป็นต้องอยู่ในระดับสถาปัตยกรรมนักบินอวกาศและในความเป็นจริงอาจเป็นประโยชน์ แต่ฉันอดไม่ได้ที่จะสังเกตเห็นว่าคนอื่นจะใช้คลาสเดียวกันหรือแพ็คเกจเดียวกันอย่างชัดเจนตรงไปตรงมา (และบางครั้งน่าเบื่อ) ฉันสังเกตว่าฉันมักจะออกแบบโปรแกรมด้วยการแก้ไขปัญหาบางครั้งก็จงใจและบางครั้งก็เบื่อ ไม่ว่าในกรณีใดฉันมักจะเชื่อโดยสุจริตว่าโซลูชันของฉันนั้นใสและสง่างามจนกระทั่งฉันเห็นหลักฐานที่ตรงกันข้าม แต่โดยปกติแล้วมันจะสายเกินไป นอกจากนี้ยังมีส่วนหนึ่งของฉันที่ชอบสมมติฐานที่ไม่มีเอกสารในการทำสำเนารหัสและความฉลาดในการเรียบง่าย ฉันจะทำอะไรได้บ้างที่จะต่อต้านการกระตุ้นให้เขียนรหัส“ ฉลาด”และเสียงกระดิ่งที่ฉันควรทำเมื่อใด ปัญหาคือการผลักมากขึ้นขณะที่ฉันกำลังทำงานกับทีมนักพัฒนาที่มีประสบการณ์และบางครั้งความพยายามของฉันในการเขียนรหัสสมาร์ทดูเหมือนโง่เง่าแม้แต่กับตัวเองหลังจากเวลาผ่านไปภาพลวงตาของความสง่างาม

10
Java แต่ละบรรทัดมีจำนวนบรรทัดเท่าใด [ปิด]
จากประสบการณ์ของคุณกฎของหัวแม่มือที่มีประโยชน์สำหรับจำนวนบรรทัดของโค้ดมีมากเกินไปสำหรับคลาสหนึ่งใน Java เพื่อความชัดเจนฉันรู้ว่าจำนวนบรรทัดไม่ได้ใกล้เคียงกับมาตรฐานจริงเพื่อใช้สำหรับสิ่งที่ควรอยู่ในชั้นเรียนเฉพาะและสิ่งที่ไม่ควร คลาสควรได้รับการออกแบบให้สอดคล้องกับปรัชญา OOP (การห่อหุ้ม ฯลฯ ) ที่เหมาะสม ที่กล่าวว่ากฎง่ายๆสามารถให้เป็นจุดเริ่มต้นที่มีประโยชน์สำหรับการพิจารณาการรีแฟคเจอริ่ง (เช่น "อืมชั้นนี้มีบรรทัดของรหัส> n มันอาจไม่สามารถอ่านได้และทำงานของการห่อหุ้มด้วยหมัด ถูก refactored ในบางจุด ") ในทางกลับกันคุณอาจพบตัวอย่างของคลาสที่มีขนาดใหญ่มากที่ยังคงเชื่อฟังการออกแบบ OOP ได้ดีและอ่านได้และบำรุงรักษาได้แม้จะมีความยาวอยู่หรือไม่ นี่คือที่เกี่ยวข้องที่ไม่ซ้ำกันคำถามเกี่ยวกับเส้นต่อฟังก์ชั่น

15
เป็นไปได้หรือไม่ที่จะไปถึงสถานะข้อบกพร่องสัมบูรณ์เป็นศูนย์สำหรับซอฟต์แวร์ขนาดใหญ่?
ฉันกำลังพูดถึงโค้ดประมาณ 20-30 ล้านบรรทัดซอฟต์แวร์ในระดับและความซับซ้อนของ Autodesk Maya หากคุณหยุดการพัฒนาตราบใดที่จำเป็นต้องทำคุณสามารถแก้ไขข้อบกพร่องทั้งหมดได้จริงหรือไม่จนกว่าจะไม่มีข้อผิดพลาดเพียงครั้งเดียวหากสิ่งนั้นสามารถตรวจสอบได้ด้วยคอมพิวเตอร์? อะไรคือข้อโต้แย้งสำหรับและต่อต้านการดำรงอยู่ของระบบที่ปราศจากข้อบกพร่อง? เนื่องจากมีความคิดบางอย่างที่คุณแก้ไขทุกครั้งจะสร้างข้อบกพร่องมากขึ้น แต่ฉันไม่คิดว่าเป็นเรื่องจริง โดยข้อบกพร่องฉันหมายถึงจากการพิมพ์ผิดที่ง่ายที่สุดใน UI เพื่อข้อบกพร่องเชิงป้องกันที่รุนแรงยิ่งขึ้นที่ไม่มีวิธีแก้ปัญหา ตัวอย่างเช่นฟังก์ชั่นการเขียนสคริปต์ที่เฉพาะเจาะจงคำนวณบรรทัดฐานไม่ถูกต้อง แม้กระทั่งเมื่อมีวิธีแก้ไขปัญหาปัญหายังคงต้องได้รับการแก้ไข ดังนั้นคุณสามารถพูดได้ว่าคุณสามารถทำสิ่งนี้ด้วยตนเองแทนการใช้ฟังก์ชั่นที่ให้ไว้ แต่ฟังก์ชั่นนั้นยังคงต้องได้รับการแก้ไข

8
หากฉันต้องการใช้หน่วยความจำตลอดอายุการใช้งานของโปรแกรมฉันจำเป็นต้องเพิ่มจำนวนหน่วยความจำก่อนที่จะสิ้นสุดโปรแกรมหรือไม่?
ในหนังสือและแบบฝึกหัดหลายเล่มฉันเคยได้ยินการฝึกฝนการจัดการความจำและรู้สึกว่าสิ่งลึกลับและน่ากลัวบางอย่างจะเกิดขึ้นถ้าฉันไม่ได้ใช้หน่วยความจำฟรีหลังจากที่ฉันใช้งานเสร็จแล้ว ฉันไม่สามารถพูดสำหรับระบบอื่น ๆ (ถึงฉันมันก็สมเหตุสมผลที่จะสมมติว่าพวกเขาใช้แนวทางปฏิบัติที่คล้ายกัน) แต่อย่างน้อยใน Windows เคอร์เนลรับประกันโดยทั่วไปว่าจะล้างทรัพยากรส่วนใหญ่ (ยกเว้นข้อผิดพลาดเล็กน้อย) ที่ใช้โดย โปรแกรมหลังจากสิ้นสุดโปรแกรม ซึ่งรวมถึงหน่วยความจำฮีปท่ามกลางสิ่งอื่น ๆ อีกมากมาย ฉันเข้าใจว่าทำไมคุณต้องการปิดไฟล์หลังจากใช้งานเสร็จแล้วเพื่อให้ผู้ใช้สามารถใช้งานได้หรือทำไมคุณต้องการยกเลิกการเชื่อมต่อซ็อกเก็ตที่เชื่อมต่อกับเซิร์ฟเวอร์เพื่อประหยัดแบนด์วิดท์ แต่ดูเหมือนว่าโง่ ต้อง micromanage ทุกหน่วยความจำของคุณใช้โดยโปรแกรมของคุณ ตอนนี้ฉันยอมรับว่าคำถามนี้กว้างเนื่องจากวิธีที่คุณควรจัดการหน่วยความจำของคุณขึ้นอยู่กับจำนวนหน่วยความจำที่คุณต้องการและเมื่อคุณต้องการดังนั้นฉันจะ จำกัด ขอบเขตของคำถามนี้ให้แคบลง: หากฉันต้องการใช้ชิ้นส่วนของ หน่วยความจำตลอดอายุการใช้งานของโปรแกรมมันจำเป็นหรือไม่ที่จะปล่อยให้ถูกต้องก่อนสิ้นสุดโปรแกรม? แก้ไข: คำถามที่แนะนำว่าซ้ำซ้อนเป็นคำถามเฉพาะของตระกูล Unix ของระบบปฏิบัติการ คำตอบอันดับแรกของมันยังระบุเครื่องมือเฉพาะสำหรับ Linux (เช่น Valgrind) คำถามนี้มีขึ้นเพื่อครอบคลุมระบบปฏิบัติการที่ "ไม่ธรรมดา" ส่วนใหญ่และทำไมจึงเป็นหรือไม่ใช่แนวปฏิบัติที่ดีในการเพิ่มหน่วยความจำที่จำเป็นตลอดอายุการใช้งานของโปรแกรม

17
วิธีการเขียนลูปที่ถูกต้อง?
เวลาส่วนใหญ่ในขณะที่เขียนลูปฉันมักจะเขียนเงื่อนไขขอบเขตที่ไม่ถูกต้อง (เช่น: ผลลัพธ์ไม่ถูกต้อง) หรือข้อสันนิษฐานของฉันเกี่ยวกับการยุติลูปนั้นผิด (เช่นลูปที่รันไม่สิ้นสุด) แม้ว่าฉันจะได้สมมติฐานที่ถูกต้องหลังจากการทดลองและข้อผิดพลาดบางอย่าง แต่ฉันก็หงุดหงิดเกินไปเพราะขาดรูปแบบการคำนวณที่ถูกต้องในหัวของฉัน /** * Inserts the given value in proper position in the sorted subarray i.e. * array[0...rightIndex] is the sorted subarray, on inserting a new value * our new sorted subarray becomes array[0...rightIndex+1]. * @param array The whole array whose initial elements [0...rightIndex] are …

8
ฉันจะทำให้สิ่งต่าง ๆ ถูกต้องในช่วงเริ่มต้นของโครงการซอฟต์แวร์ได้อย่างไร [ปิด]
ฉันเป็นโปรแกรมเมอร์ที่มีประสบการณ์ 1 ปีเมื่อเร็ว ๆ นี้ฉันรู้ว่าฉันแทบจะไม่เริ่มโครงการอย่างถูกต้อง เริ่มต้นด้วยการใช้งานสองสามกรณี เริ่มการเข้ารหัส ตระหนักถึงบางสิ่งที่ฉันไม่ได้จัดการได้ดีและไม่เหมาะกับ codebase ปัจจุบัน เขียนซ้ำส่วนใหญ่ของรหัส และสิ่งนี้อาจไปสองสามครั้ง ดังนั้นคำถามของฉันคือ การปฏิบัติเช่นนี้เป็นเรื่องปกติหรือไม่หรือฉันบอกว่าฉันไม่มีความสามารถ ฉันจะปรับปรุงตัวเองในด้านนี้ได้อย่างไร?

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