คำถามติดแท็ก code-duplication

19
ฉันจะลบการทำสำเนารหัสระหว่างฟังก์ชั่นสมาชิกแบบ const และ non-const ที่คล้ายกันได้อย่างไร
สมมติว่าฉันมีสิ่งต่อไปนี้class Xที่ฉันต้องการคืนการเข้าถึงสมาชิกภายใน: class Z { // details }; class X { std::vector<Z> vecZ; public: Z& Z(size_t index) { // massive amounts of code for validating index Z& ret = vecZ[index]; // even more code for determining that the Z instance // at index is *exactly* the right sort of Z …

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

2
วิธีลดการทำสำเนารหัสเมื่อจัดการกับประเภทผลรวมซ้ำ
ฉันกำลังทำงานกับล่ามง่าย ๆ สำหรับภาษาการเขียนโปรแกรมและฉันมีชนิดข้อมูลเช่นนี้: data Expr = Variable String | Number Int | Add [Expr] | Sub Expr Expr และฉันมีฟังก์ชั่นมากมายที่ทำสิ่งที่ง่ายเช่น: -- Substitute a value for a variable substituteName :: String -> Int -> Expr -> Expr substituteName name newValue = go where go (Variable x) | x == name = Number …

2
วิธีการหลีกเลี่ยงการทำซ้ำของรหัสที่เกี่ยวกับประเภทดั้งเดิม?
พื้นหลัง กระแสข้อมูลบิตได้รับการสนับสนุนโดยอาร์เรย์ของไบต์ มีวิธีการจำนวนหนึ่งที่อ่านจากอาร์เรย์ไบต์นั้นไปยังอาร์เรย์ดั้งเดิมแบบบังคับ ปัญหา มีรหัสซ้ำอยู่ Java ไม่มีข้อมูลทั่วไปเกี่ยวกับประเภทดั้งเดิมดังนั้นบางทีการทำซ้ำอาจไม่สามารถหลีกเลี่ยงได้ รหัส รหัสซ้ำจะปรากฏในวิธีการต่อไปนี้: @Override public long readBytes(final byte[] out, final int offset, final int count, final int bits) { final int total = offset + count; assert out != null; assert total <= out.length; final long startPosition = position(); for (int i = offset; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.