'รหัสเอียง' คืออะไร


11

ในหนังสือ O'Reilly ใน Scala ฉันอ่านว่าการวางสำเนาของรหัสสร้างขึ้น:

... สร้างประเด็นของรหัสบวม, การบำรุงรักษาและลาด ,

ฉันไม่เห็นคำจำกัดความที่ชัดเจนของคำว่าเอียงในบริบท ฉันตระหนักถึงปัญหาของการคัดลอกวาง แต่ฉันไม่สามารถทำให้พอดีกับคำว่า 'เอียง' เนื่องจากสิ่งนี้ถูกใช้ในหนังสือ O'Reilly ฉันเดาว่ามันเป็นคำที่ใช้ในการเขียนโปรแกรมอย่างแท้จริง

ตัวชี้ใด ๆ

คำตอบ:


19

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

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


+1 สำหรับคำอธิบายที่ดี นอกจากนี้สำหรับบางท้อง - ฉันต้องจัดการกับ codebase ที่ประกอบด้วยรหัสคัดลอกวางหลายร้อยและร้อยบรรทัดที่มีปัญหาชนิดนี้ซึ่งต้องแก้ไข
KChaloux

2

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


3
ความแตกต่างไม่ได้เกิดจากการคัดลอกและวาง เกิดจากสิ่งที่เกิดขึ้นหลังจากการคัดลอกและวาง
สตีเฟ่นซี

1
ค่อนข้างจริง แต่ถ้ารหัสไม่ได้ถูกคัดลอกและวางความแตกต่างก็จะไม่เกิดขึ้น
Jim Nutt

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