"Mã nghiêng" là gì?


11

Trong cuốn sách O'Reilly về Scala, tôi đã đọc rằng việc sao chép mã tạo ra:

... tạo ra các vấn đề về sự phình to mã, khả năng bảo trì và độ lệch ,

Tôi không thể thấy bất kỳ định nghĩa rõ ràng của từ xiên trong ngữ cảnh. Tôi nhận thức được các vấn đề của việc sao chép, nhưng tôi không thể làm cho chúng phù hợp với từ 'xiên'. Vì nó được sử dụng trong một cuốn sách O'Reilly nên tôi đoán đó là một thuật ngữ lập trình thực sự đang lưu hành.

Bất kỳ con trỏ?

Câu trả lời:


19

Skew trong định nghĩa truyền thống nhất của nó có nghĩa là ra khỏi sự liên kết (không song song). Rõ ràng khi mã được sao chép và dán hai bản sao giống hệt nhau và song song. Đây không phải là một bất biến. Những thay đổi được thực hiện cho một bản sao không được đảm bảo để chuyển sang bản sao khác (do bất cẩn hoặc thiếu hiểu biết). Bây giờ có hai phiên bản mã tồn tại ở hai nơi khác nhau bị sai lệch (không còn giống nhau). Điều này có thể dẫn đến các lỗi kỳ lạ khi hành vi dường như hoạt động ở một nơi chứ không phải ở nơi khác. Giữ mã của bạn DRY (không lặp lại chính mình).

CHỈNH SỬA / BỔ SUNG: Nếu bạn có nhu cầu sao chép và dán, nhiều khả năng những gì bạn nên làm là trừu tượng mã bạn đang sao chép vào một siêu lớp dùng chung (hướng đối tượng) hoặc một số chức năng tiện ích đi kèm (chức năng).


+1 cho một lời giải thích tốt. Ngoài ra đối với một số catharsis - tôi phải đối phó với một codebase bao gồm hàng trăm và hàng trăm dòng mã sao chép-dán với chính xác loại vấn đề này, cần phải được sửa.
KChaloux

2

Bao giờ chơi game Điện thoại khi còn bé? Bạn biết đấy, người mà mỗi người thì thầm một cụm từ với người tiếp theo và cuối cùng, người cuối cùng nói to cụm từ đó và mọi người cười vì nó đã trở nên khác biệt như thế nào so với bản gốc? Đó là xiên. Khi bạn sao chép và dán mã, chắc chắn bạn sẽ thực hiện những thay đổi nhỏ trong một hoặc nhiều bản sao. Và bạn càng thường xuyên sao chép và dán cùng một mã, thì càng có nhiều thay đổi được xây dựng và mã bị lệch khỏi bản gốc. Tôi đã thấy mã với hàng trăm khối sao chép và dán, mỗi khối khác nhau chỉ bằng một vài ký tự, gần như không thể duy trì. Nếu bạn thấy mình muốn cắt và dán một phần mã, ít nhất bạn nên xem xét đưa nó vào chức năng của chính nó.


3
Sự khác biệt không phải do bản sao và dán. Chúng được gây ra những gì xảy ra sau khi sao chép và dán.
Stephen C

1
Hoàn toàn đúng, nhưng nếu mã không được sao chép và dán, sự khác biệt sẽ không xảy ra.
Jim Nutt

Đó là một ví dụ tốt, nhưng sự tương tự bị lệch khỏi khái niệm này. Trong tương tự, dán tạo ra một bản sao khác, trong khi trong khái niệm thực tế, bản sao giống nhau, nhưng không được đồng bộ hóa, do đó gây ra sai lệch.
Sundeep 12/12/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.