Chà, những thứ tôi thấy trong chủ đề này đều tuyệt vời, nhưng tôi có một định nghĩa về một "bất biến" rất hữu ích cho tôi trong công việc.
Bất biến là bất kỳ quy tắc logic nào phải được tuân theo trong suốt quá trình thực thi chương trình của bạn có thể được truyền đạt tới người, nhưng không phải với trình biên dịch của bạn.
Định nghĩa này rất hữu ích vì nó tách ra các điều kiện thành hai nhóm: những trình biên dịch có thể được tin cậy khi thực thi và những nhóm phải được ghi lại, thảo luận, nhận xét hoặc truyền đạt tới những người đóng góp để họ tương tác với codebase mà không gây ra lỗi .
Ngoài ra, định nghĩa này rất hữu ích vì nó cho phép bạn sử dụng khái quát hóa, "Bất biến là xấu".
Ví dụ, bộ chuyển động trong một chiếc xe số tay được thiết kế để tránh bất biến. Nếu tôi muốn, tôi có thể xây dựng một hộp số với một đòn bẩy cho mỗi thiết bị. Đòn bẩy này có thể được chuyển tiếp ("tham gia") hoặc quay lại ("thảnh thơi"). Trong một hệ thống như vậy, tôi đã tạo ra một "bất biến", có thể được ghi lại như sau:
"Điều rất quan trọng là thiết bị hiện đang được tháo ra trước khi một thiết bị khác được tham gia. Để tham gia bất kỳ hai bánh răng nào cùng một lúc sẽ gây ra căng thẳng cơ học sẽ xé tan bộ truyền. Luôn luôn ngắt thiết bị hiện đang tham gia trước khi gắn thiết bị khác."
Và do đó, người ta có thể đổ lỗi cho việc truyền bị hỏng khi lái xe cẩu thả. Tuy nhiên, những chiếc xe hiện đại sử dụng một cây gậy duy nhất xoay quanh các bánh răng. Nó được thiết kế theo cách mà trên một chiếc xe sang số hiện đại, không thể tham gia hai bánh răng cùng một lúc.
Theo cách này, chúng ta có thể nói rằng việc truyền đã được thiết kế để "loại bỏ bất biến", bởi vì nó không cho phép bản thân được cấu hình cơ học theo cách vi phạm quy tắc logic.
Mọi bất biến của loại này mà bạn loại bỏ khỏi mã của mình là một sự cải tiến, bởi vì nó làm giảm tải nhận thức khi làm việc với nó.