วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

8
หากโมฆะเป็นสิ่งที่ชั่วร้ายสิ่งที่ควรใช้เมื่อค่าสามารถขาดความหมายได้อย่างไร
นี่เป็นกฎข้อหนึ่งที่ซ้ำแล้วซ้ำอีกและทำให้ฉันงงงวย Nulls เป็นความชั่วร้ายและควรหลีกเลี่ยงเมื่อใดก็ตามที่เป็นไปได้ แต่จากความไร้เดียงสาของฉันให้ฉันกรีดร้อง - บางครั้งคุณค่าอาจหายไปอย่างมีความหมาย! โปรดให้ฉันถามสิ่งนี้ในตัวอย่างที่มาจากรหัสที่น่ากลัวที่ต่อต้านการขี่แบบนี้ฉันกำลังทำงานอยู่ในขณะนี้ นี่คือที่หลักของมันเป็นเกมที่มีผู้เล่นหลายคนทางเว็บซึ่งผู้เล่นทั้งสองวิ่งไปพร้อมกัน (เช่นในโปเกมอนและตรงข้ามกับหมากรุก) หลังจากนั้นแต่ละครั้งเซิร์ฟเวอร์จะเผยแพร่รายการของการอัปเดตรหัส JS ฝั่งไคลเอ็นต์ ชั้นอัปเดต: public class GameUpdate { public Player player; // other stuff } คลาสนี้ได้รับการต่อเนื่องเป็น JSON และส่งไปยังผู้เล่นที่เชื่อมต่อ การอัปเดตส่วนใหญ่จะมีผู้เล่นเชื่อมโยงกับพวกเขาตามปกติ - หลังจากทั้งหมดคุณจำเป็นต้องรู้ว่าผู้เล่นคนใดที่ทำในเทิร์นนี้ อย่างไรก็ตามการอัปเดตบางอย่างไม่สามารถเชื่อมโยง Player ได้อย่างมีความหมาย ตัวอย่าง: เกมถูกบังคับเนื่องจากมีการ จำกัด การเลี้ยวโดยไม่มีการกระทำเกิน สำหรับการอัปเดตดังกล่าวฉันคิดว่ามันมีความหมายที่จะให้ผู้เล่นเป็นโมฆะ แน่นอนฉันสามารถ "แก้ไข" รหัสนี้โดยใช้การสืบทอด: public class GameUpdate { // stuff } public class …

1
วิธีการใช้สาขาและผูกพันในภาษาการเขียนโปรแกรมการทำงานหรือไม่
ฉันพยายามเขียนสาขาและค้นหาขอบเขตในชุดของฟังก์ชั่นทั้งหมด f: D -> R ซึ่งขนาดโดเมนเล็ก (| D | ~ 20) และช่วงนั้นใหญ่กว่ามาก (| R | ~ 2 ^ 20 ) ตอนแรกฉันคิดวิธีแก้ปัญหาต่อไปนี้ (builder (domain range condlist partial-map) (let ((passed? (check condlist partial-map))) (cond ((not passed?) nil) (domain (recur-on-first domain range condlist partial-map '())) (t partial-map)))) (recur-on-first (domain range condlist partial-map ignored) …

5
ทำไมเราไม่สามารถใช้ที่อยู่ IP แทนคุกกี้ในการระบุลูกค้าใน servlets
ฉันรู้ว่าเรามีข้อได้เปรียบพิเศษในการใช้คุกกี้ผ่านที่อยู่ IP แต่คำถามของฉันคือเหตุใดคอนเทนเนอร์ไม่สามารถจดจำที่อยู่ IP ของลูกค้าในการระบุลูกค้าเมื่อเขาเยี่ยมชมเว็บไซต์ของเขาอีกครั้ง เป็นไปได้ไหมที่คอนเทนเนอร์จะจดจำลูกค้าด้วยความช่วยเหลือของที่อยู่ IP?

7
มีวิธีปฏิบัติสำหรับโครงสร้างโหนดที่เชื่อมโยงที่จะไม่เปลี่ยนรูป?
ฉันตัดสินใจเขียนรายการที่ลิงก์เดี่ยว ๆ และมีแผนที่จะทำให้โครงสร้างโหนดเชื่อมโยงภายในไม่เปลี่ยนรูป ฉันวิ่งเข้าไปในอุปสรรค์ ว่าฉันมีโหนดเชื่อมโยงต่อไปนี้ (จากaddการดำเนินการก่อนหน้า): 1 -> 2 -> 3 -> 4 5และบอกว่าผมต้องการที่จะผนวก การทำเช่นนี้ตั้งแต่โหนด4จะไม่เปลี่ยนรูปฉันต้องสร้างสำเนาใหม่ของ4แต่แทนที่ของสนามใหม่ที่มีโหนดnext 5ปัญหาคือตอนนี้3กำลังอ้างอิงเก่า4; 5หนึ่งโดยไม่ต้องต่อท้าย ตอนนี้ฉันต้องการคัดลอก3และแทนที่nextฟิลด์เพื่ออ้างอิง4สำเนา แต่ตอนนี้2กำลังอ้างอิงเก่า3... หรือกล่าวอีกนัยหนึ่งเมื่อต้องการต่อท้ายรายการทั้งหมดจะต้องคัดลอก คำถามของฉัน: ความคิดของฉันถูกต้องหรือไม่ มีวิธีการผนวกโดยไม่คัดลอกโครงสร้างทั้งหมดหรือไม่ เห็นได้ชัดว่า "จาวาที่มีประสิทธิภาพ" มีคำแนะนำ: คลาสควรจะไม่เปลี่ยนรูปเว้นแต่จะมีเหตุผลที่ดีมากที่ทำให้พวกเขาเปลี่ยนแปลงได้ ... นี่เป็นกรณีที่ดีสำหรับการเปลี่ยนแปลงหรือไม่? ฉันไม่คิดว่านี่เป็นคำตอบที่ซ้ำกันเนื่องจากฉันไม่ได้พูดถึงรายการ เห็นได้ชัดว่าจะต้องมีการเปลี่ยนแปลงเพื่อให้สอดคล้องกับอินเทอร์เฟซ (โดยไม่ต้องทำอะไรบางอย่างเช่นการรักษารายการใหม่ภายในและดึงมันออกมาผ่านทะเยอทะยานในความคิดที่สองแม้ว่าแม้จะต้องมีการกลายพันธุ์; ฉันกำลังพูดถึงว่า internals ของรายการจะต้องไม่เปลี่ยนรูป

9
วิธีจัดการกับความเข้าใจผิดเกี่ยวกับ“ การปรับให้เหมาะสมก่อนกำหนดเป็นรากของความชั่วทั้งหมด”?
ฉันได้พบกับคนมากมายที่ดื้อรั้นต่อสิ่งใดก็ตามซึ่งถือได้ว่าเป็น "การเพิ่มประสิทธิภาพ" ในความหมายทั่วไปของคำภาษาอังกฤษและพวกเขามักจะพูดคำต่อคำที่อ้างถึง (บางส่วน) "การเพิ่มประสิทธิภาพก่อนกำหนดเป็นรากฐานของความชั่วร้ายทั้งหมด" เป็นข้ออ้างสำหรับท่าทางของพวกเขาหมายความว่าพวกเขาตีความสิ่งที่ฉันกำลังพูดถึงจะเป็น "การเพิ่มประสิทธิภาพก่อนวัยอันควร" อย่างไรก็ตามมุมมองเหล่านี้บางครั้งก็ยึดมั่นอย่างน่าขันที่พวกเขาไม่สนใจความแตกต่างของอัลกอริทึมหรือโครงสร้างข้อมูลใด ๆ จากการดำเนินการ "ไร้เดียงสา" ที่บริสุทธิ์ที่สุด ... หรืออย่างน้อยเบี่ยงเบนจากวิธีที่พวกเขาทำสิ่งต่าง ๆ มาก่อนคนเราจะเข้าหากันเช่นนี้ได้อย่างไรเพื่อทำให้พวกเขา "เปิดหู" อีกครั้งหลังจากพวกเขาปิดตัวลงจากการได้ยินเกี่ยวกับ "ประสิทธิภาพ" หรือ "การเพิ่มประสิทธิภาพ" ฉันจะหารือเกี่ยวกับหัวข้อการออกแบบ / การนำไปใช้งานซึ่งมีผลกระทบต่อประสิทธิภาพโดยไม่ต้องให้ผู้คนคิดในทันทีว่า: "ผู้ชายคนนี้ต้องการใช้เวลาสองสัปดาห์ในรหัสสิบบรรทัด?" ตอนนี้ท่าทางว่า "การเพิ่มประสิทธิภาพทั้งหมดจะคลอดก่อนกำหนดและดังนั้นความชั่วร้าย" หรือไม่ได้รับแล้วครอบคลุมที่นี่เช่นเดียวกับในมุมอื่น ๆ ของเว็บและจะได้รับการกล่าวถึงวิธีการรับรู้เมื่อการเพิ่มประสิทธิภาพการคลอดก่อนกำหนดและดังนั้นจึงชั่วร้ายแต่ โชคไม่ดีที่มีคนในโลกแห่งความเป็นจริงที่ยังไม่เปิดกว้างต่อความท้าทายต่อความเชื่อมั่นในการต่อต้านการเพิ่มประสิทธิภาพ ความพยายามครั้งก่อน สองสามครั้งฉันได้ลองเสนอราคาที่สมบูรณ์จาก Donald Knuthเพื่ออธิบายว่า "การปรับให้เหมาะสมก่อนกำหนดไม่ดี" ↛ "การเพิ่มประสิทธิภาพทั้งหมดไม่ดี": เราควรลืมเกี่ยวกับประสิทธิภาพเล็กน้อยพูดถึง 97% ของเวลา: การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วร้ายทั้งหมด แต่เราไม่ควรพลาดโอกาสที่สำคัญ 3% อย่างไรก็ตามเมื่อมีการเสนอราคาทั้งหมดบางครั้งคนเหล่านี้จะมีความมั่นใจมากขึ้นว่าสิ่งที่ฉันทำคือการเพิ่มประสิทธิภาพก่อนวัยอันควรและขุดและปฏิเสธที่จะฟัง เกือบจะเหมือนกับว่าคำว่า "การปรับให้เหมาะสม" ทำให้พวกเขากลัว: ในสองสามครั้งที่ฉันสามารถเสนอการเปลี่ยนแปลงที่เกิดขึ้นจริงในการปรับปรุงโค้ดโดยที่พวกเขาถูกคัดค้านโดยเพียงแค่หลีกเลี่ยงการใช้คำว่า "optimiz …

2
วิธีการทำเอกสารสำหรับรหัสและทำไมซอฟต์แวร์ (มักจะ) เอกสารไม่ดี?
มีตัวอย่างที่ดีของรหัสที่มีเอกสารที่ดีเช่น java api แต่รหัสจำนวนมากในโครงการสาธารณะเช่นโครงการคอมไพล์และโครงการภายในของ บริษัท นั้นได้รับการบันทึกไว้ไม่ดีและไม่เป็นมิตรกับผู้มาใหม่ ในการ จำกัด การพัฒนาซอฟต์แวร์ทั้งหมดของฉันฉันต้องจัดการกับรหัสที่มีเอกสารไม่ดี ฉันสังเกตเห็นสิ่งต่าง ๆ ต่อไปนี้ - ความคิดเห็นน้อยหรือไม่มีเลยในรหัส ชื่อเมธอดและตัวแปรไม่ได้อธิบายตัวเอง มีเอกสารเพียงเล็กน้อยหรือไม่มีเลยว่าโค้ดเข้ากับระบบหรือกระบวนการทางธุรกิจได้อย่างไร จ้างนักพัฒนาที่ไม่ดีหรือไม่ให้คำปรึกษากับคนที่ดี พวกเขาไม่สามารถเขียนโค้ดที่ง่ายและสะอาดได้ ดังนั้นจึงเป็นเรื่องยากหรือเป็นไปไม่ได้สำหรับทุกคนรวมถึงผู้พัฒนาที่จะจัดทำเอกสารรหัส เป็นผลให้ฉันต้องผ่านรหัสจำนวนมากและพูดคุยกับคนจำนวนมากเพื่อเรียนรู้สิ่งต่าง ๆ ฉันรู้สึกว่านี่เป็นการเสียเวลาของทุกคน นอกจากนี้ยังสร้างความต้องการเซสชันการถ่ายโอน KT / ความรู้สำหรับผู้มาใหม่ไปยังโครงการ ฉันได้เรียนรู้ว่าเอกสารไม่ได้รับความสนใจเนื่องจากมีเหตุผลดังต่อไปนี้: ความเกียจคร้าน นักพัฒนาไม่ต้องการทำอะไรนอกจากรหัส งานรักษาความปลอดภัย. (หากไม่มีใครสามารถเข้าใจรหัสของคุณได้อย่างง่ายดายคุณอาจไม่สามารถเปลี่ยนได้อย่างง่ายดาย) กำหนดเวลาที่ยากลำบากทำให้เสียเวลาเล็กน้อยในการจัดทำเอกสาร ดังนั้นฉันสงสัยว่าจะมีวิธีการส่งเสริมและบังคับใช้แนวทางปฏิบัติด้านเอกสารที่ดีใน บริษัท หรือโครงการหรือไม่ กลยุทธ์ที่จะใช้ในการสร้างเอกสารที่เหมาะสมสำหรับระบบและรหัสของโครงการใด ๆ โดยไม่คำนึงถึงความซับซ้อนของมันคืออะไร? มีตัวอย่างที่ดีหรือไม่เมื่อจำเป็นต้องใช้เอกสารน้อยที่สุดหรือไม่ IMHO ฉันรู้สึกว่าเราควรมีการตรวจสอบเอกสารหลังจากส่งมอบโครงการแล้ว หากไม่ใช่เรื่องง่ายกระชับเป็นตัวอย่างและเป็นมิตรต่อผู้ใช้วิศวกรหรือนักพัฒนาเอกสารด้านเทคนิคจะเป็นผู้รับผิดชอบและทำการแก้ไข ฉันไม่คาดหวังว่าผู้คนจะทำเอกสารรีมไม่หวังว่ามันจะเป็นมิตรกับผู้ใช้เหมือนกับหนังสือเล่มแรก แต่ฉันหวังว่ามันจะช่วยลดความจำเป็นในการวิเคราะห์ชั่วโมงและช่วงเวลา KT ที่สิ้นเปลือง มีวิธีที่จะจบหรือบรรเทาความบ้าคลั่งนี้หรือไม่? "การพัฒนาเอกสารขับเคลื่อน" อาจจะ?

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

2
คำว่า“ คดีงู” เกิดขึ้นเมื่อใด [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา หลายคนใช้คำว่างูกรณีwith_the_form_of_underscoresที่จะอธิบายตัวแปรหรือสัญลักษณ์อื่น ๆ ในสัปดาห์ที่ผ่านมาฉันได้เปิดการค้นหาแบบกว้างหลายครั้ง ฉันไม่พบสิ่งใดเกี่ยวกับที่มาของคำนี้ซึ่งมีรายละเอียดมากกว่าที่ Wikipedia พูด (ด้านบน) บันทึกที่เก่าที่สุดของคำนี้มีการใช้เมื่อใด

2
ช่วงความสลับซับซ้อนของวัฏจักร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ประเภทของความซับซ้อนตามวัฏจักรคืออะไร? ตัวอย่างเช่น: 1-5: บำรุงรักษาง่าย 6-10: ยาก 11-15: ยากมาก 20+: ใกล้จะเป็นไปไม่ได้ เป็นเวลาหลายปีแล้วที่ฉันได้ไปโดยมีข้อสันนิษฐานว่า 10 ข้อ จำกัด และสิ่งอื่น ๆ นอกเหนือจากนั้นไม่ดี ฉันกำลังวิเคราะห์วิธีแก้ปัญหาและฉันพยายามกำหนดคุณภาพของรหัส ความซับซ้อนตามวัฏจักรแน่นอนไม่ได้วัดเพียง แต่มันสามารถช่วย มีวิธีการที่มีความซับซ้อนของวงจร 200+ ฉันรู้ว่ามันแย่มาก แต่ฉันอยากรู้เกี่ยวกับช่วงล่างเช่นในตัวอย่างด้านบน ฉันพบสิ่งนี้ : ค่าอ้างอิงดังกล่าวจาก Carnegie Mellon กำหนดช่วงคร่าวๆสี่ค่าสำหรับค่าความซับซ้อนของวงจร: วิธีการระหว่าง 1 ถึง 10 ถือว่าง่ายและเข้าใจง่าย ค่าระหว่าง 10 ถึง 20 แสดงถึงรหัสที่ซับซ้อนกว่าซึ่งอาจยังเข้าใจได้ อย่างไรก็ตามการทดสอบจะยากขึ้นเนื่องจากจำนวนสาขาที่เป็นไปได้มากขึ้นที่รหัสสามารถทำได้ ค่า 20 …

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

3
SQL แบบอินไลน์ยังจัดอยู่ในประเภทการปฏิบัติที่ไม่ดีในขณะนี้ที่เรามี Micro ORMs หรือไม่?
นี่เป็นคำถามปลายเปิดเล็กน้อย แต่ฉันต้องการความคิดเห็นบางอย่างเนื่องจากฉันโตขึ้นในโลกที่สคริปต์ SQL แบบอินไลน์เป็นบรรทัดฐานจากนั้นเราทุกคนต่างก็ตระหนักถึงปัญหาการฉีด SQL ที่ใช้กันมากและ sql นั้นบอบบางเพียงใด ทำการปรับแต่งสตริงทั่วทุกที่ จากนั้นก็เริ่มรุ่งอรุณของ ORM ซึ่งคุณได้อธิบายการสืบค้นไปยัง ORM และปล่อยให้มันสร้าง SQL ของตัวเองซึ่งในหลายกรณีนั้นไม่เหมาะสมแต่ปลอดภัยและง่าย สิ่งที่ดีอีกอย่างเกี่ยวกับ ORMs หรือเลเยอร์สิ่งที่เป็นนามธรรมของเลเยอร์คือว่า SQL นั้นถูกสร้างขึ้นด้วยเอ็นจิ้นฐานข้อมูลของมันดังนั้นฉันสามารถใช้ Hibernate / Nhibernate กับ MSSQL, MYSQL และรหัสของฉันไม่เคยเปลี่ยน ตอนนี้ก้าวไปข้างหน้าอย่างรวดเร็วจนถึงปัจจุบันซึ่ง Micro ORM ดูเหมือนจะชนะมากกว่านักพัฒนาอื่น ๆ ฉันสงสัยว่าทำไมเราถึงได้นำ U-Turn มาใช้กับเรื่องทั้งหมดในตาราง ฉันต้องยอมรับว่าฉันชอบความคิดที่ว่าไม่มีไฟล์ ORM config และความสามารถในการเขียนข้อความค้นหาของฉันในลักษณะที่เหมาะสมที่สุด แต่รู้สึกเหมือนฉันกำลังเปิดตัวเองกลับสู่ช่องโหว่เก่า ๆ เช่นการฉีด SQL และฉันก็ผูกตัวเอง เอ็นจิ้นฐานข้อมูลหนึ่งดังนั้นถ้าฉันต้องการซอฟต์แวร์ของฉันเพื่อสนับสนุนเอนจินฐานข้อมูลหลายตัวฉันจะต้องทำการแฮ็คสตริงเพิ่มเติมซึ่งดูเหมือนว่าจะเริ่มทำให้โค้ดอ่านไม่ได้และเปราะบางยิ่งขึ้น (ก่อนที่ใครบางคนจะกล่าวถึงมันฉันรู้ว่าคุณสามารถใช้อาร์กิวเมนต์ที่อิงพารามิเตอร์กับ micro orms ส่วนใหญ่ที่ให้ความคุ้มครองในกรณีส่วนใหญ่จากการฉีด …
26 database  sql  orm 

5
การตรวจสอบการอนุญาตของผู้ใช้จะเกิดขึ้นที่ใดและใน MVC และโดยใคร
ควรตรวจสอบการอนุญาตของผู้ใช้เกิดขึ้นในรุ่นหรือคอนโทรลเลอร์ และใครควรจัดการกับการตรวจสอบการอนุญาตวัตถุผู้ใช้หรือผู้ช่วยการจัดการบางอย่าง? มันควรจะเกิดขึ้นที่ไหน? การตรวจสอบในคอนโทรลเลอร์: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... การมีการตรวจสอบในคอนโทรลเลอร์ช่วยให้การดำเนินการเป็นแบบอย่างง่ายดังนั้นเราจึงสามารถเก็บตรรกะทั้งหมดไว้กับตัวควบคุมได้ ตรวจสอบในรูปแบบ: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... โดยการใส่เช็คเข้าไปในโมเดลเราทำให้โมเดลนั้นมีความซับซ้อน แต่ก็ต้องแน่ใจว่าเราไม่อนุญาตให้ผู้ใช้ทำสิ่งที่พวกเขาไม่ควรจะอยู่ในคอนโทรลเลอร์ แล้วใครล่ะ เมื่อเราตัดสินในสถานที่แล้วใครควรทำการตรวจสอบ? ผู้ใช้งาน? Class User { bool hasPermissions(int permissionMask) { ... } ... แต่มันไม่ใช่ความรับผิดชอบของผู้ใช้ที่จะรู้ว่าเขาหรือเธอสามารถทำอะไรได้บ้างดังนั้นบางทีผู้ช่วยบางคน? Class UserManagement …
26 mvc  permissions 

7
เหตุใดการอ้างอิงถึงไม่ค่อยมีใช้ใน PHP
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 6 ปีที่แล้ว ฉันมีความรู้ C ++ และรู้ว่ามีการใช้พอยน์เตอร์ทั่วไป แต่ฉันเริ่มดูซอร์สโค้ด PHP และฉันไม่เคยเห็นโค้ดที่ใช้อ้างอิงในวิธีการ แต่รหัสจะใช้ค่าที่ส่งคืนแทนการส่งการอ้างอิงไปยังตัวแปรไปยังเมธอดซึ่งจะเปลี่ยนค่าของตัวแปรนั้นและส่งคืนค่านั้น ฉันได้อ่านแล้วว่าการใช้การอ้างอิงใช้หน่วยความจำน้อยลงดังนั้นทำไมจึงไม่ใช้ใน PHP
26 php  reference 

4
ทำไมฉันต้องใช้สัญญารหัส
ฉันเพิ่งสะดุดกับกรอบของ Microsoft สำหรับสัญญารหัส ฉันอ่านเอกสารนิดหน่อยและพบว่าตัวเองถามอยู่ตลอดเวลา: "ทำไมฉันถึงต้องการทำสิ่งนี้เพราะมันไม่ได้และไม่สามารถทำการวิเคราะห์แบบสแตติกได้" ตอนนี้ฉันมีรูปแบบการเขียนโปรแกรมป้องกันอยู่แล้วโดยมีข้อยกเว้นป้องกันเช่นนี้: if(var == null) { throw new NullArgumentException(); } ฉันยังใช้ NullObject Pattern มากและไม่ค่อยมีปัญหาใด ๆ เพิ่มการทดสอบหน่วยเข้ากับมันและคุณก็พร้อมแล้ว ฉันไม่เคยใช้การยืนยันและไม่เคยพลาดพวกเขา ค่อนข้างตรงกันข้าม ฉันเกลียดโค้ดที่มีการอ้างถึงที่ไร้ความหมายมากมายซึ่งเป็นเพียงเสียงรบกวนสำหรับฉันและเบี่ยงเบนความสนใจจากสิ่งที่ฉันต้องการเห็น รหัสสัญญาอย่างน้อยที่สุดวิธีของ Microsoft ก็เหมือนกันมาก - และยิ่งแย่ลงไปกว่านั้น พวกเขาเพิ่มเสียงรบกวนและความซับซ้อนให้กับโค้ด ใน 99% ข้อยกเว้นจะถูกโยนต่อไป - ดังนั้นฉันไม่สนใจว่ามันมาจากการยืนยัน / สัญญาหรือปัญหาจริง มีเพียงไม่กี่รายเท่านั้นที่ยังคงอยู่ซึ่งโปรแกรมระบุว่ามีความเสียหายจริง ๆ ดังนั้นข้อดีของการใช้สัญญาโค้ดคืออะไร มีใครบ้างไหม? หากคุณใช้การทดสอบหน่วยและรหัสป้องกันอยู่แล้วฉันรู้สึกว่าการแนะนำสัญญาไม่คุ้มกับค่าใช้จ่ายและทำให้เกิดเสียงรบกวนในรหัสของคุณที่ผู้ดูแลจะสาปแช่งเมื่อเขาอัปเดตวิธีดังกล่าวเหมือนกับที่ฉันทำเมื่อฉันไม่เห็นว่ารหัสกำลังทำอะไร เนื่องจากการยืนยันที่ไร้ประโยชน์ ฉันยังไม่เห็นเหตุผลที่ดีที่จะจ่ายราคา

5
เป็นไปได้ไหมที่จะอ่านหน่วยความจำจากโปรแกรมอื่นโดยการจัดสรรพื้นที่ว่างทั้งหมดบนระบบ?
ในทางทฤษฎีถ้าฉันจะสร้างโปรแกรมที่จัดสรรหน่วยความจำที่ไม่ได้ใช้ทั้งหมดในระบบและยังคงร้องขอหน่วยความจำมากขึ้นเรื่อย ๆ เนื่องจากแอปพลิเคชันอื่น ๆ ปล่อยหน่วยความจำที่พวกเขาไม่ต้องการอีกต่อไป ? หรือระบบนี้ได้รับการปกป้องด้วยระบบปฏิบัติการสมัยใหม่หรือไม่? ฉันไม่มีแอปพลิเคชันที่ใช้งานได้สำหรับสิ่งนี้ฉันแค่อยากรู้ ฉันรู้ว่ามีปัญหาบางอย่างในการจัดสรร "หน่วยความจำที่มีอยู่ทั้งหมด" ในชีวิตจริง แก้ไข: เพื่อชี้แจงฉันขอเฉพาะเกี่ยวกับหน่วยความจำ "ปล่อยตัว" ไม่เข้าถึงหน่วยความจำที่ปัจจุบันจัดสรรโดยแอปพลิเคชันอื่น

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