Đỉnh cao của những gì các câu trả lời khác đã nắm được, không phải là "giá trị ma thuật" là xấu, mà là chúng phải là:
- định nghĩa rõ ràng là hằng số;
- chỉ được xác định một lần trong toàn bộ miền sử dụng của họ (nếu có thể về mặt kiến trúc);
- được định nghĩa cùng nhau nếu chúng tạo thành một tập các hằng số có liên quan đến nhau;
- được định nghĩa ở một mức độ tổng quát thích hợp trong ứng dụng mà chúng được sử dụng; và
- được định nghĩa theo cách để hạn chế việc sử dụng chúng trong các bối cảnh không phù hợp (ví dụ: có thể sửa đổi kiểu kiểm tra).
Điều thường phân biệt "hằng số" được chấp nhận với "giá trị ma thuật" là một số vi phạm một hoặc nhiều quy tắc này.
Được sử dụng tốt, các hằng chỉ đơn giản cho phép chúng ta thể hiện các tiên đề nhất định của mã.
Điều này đưa tôi đến một điểm cuối cùng, đó là việc sử dụng quá mức các hằng số (và do đó có quá nhiều giả định hoặc ràng buộc được biểu thị theo các giá trị), ngay cả khi nó tuân thủ các tiêu chí trên (nhưng đặc biệt là nếu nó lệch khỏi chúng), có thể ngụ ý rằng giải pháp được đưa ra không đủ chung chung hoặc có cấu trúc tốt (và do đó chúng tôi không thực sự nói về ưu và nhược điểm của các hằng số nữa, mà là về ưu và nhược điểm của mã có cấu trúc tốt).
Các ngôn ngữ cấp cao có cấu trúc cho các mẫu trong các ngôn ngữ cấp thấp hơn sẽ phải sử dụng các hằng số. Các mẫu tương tự cũng có thể được sử dụng trong ngôn ngữ cấp cao hơn, nhưng không nên như vậy.
Nhưng đó có thể là một phán đoán của chuyên gia dựa trên ấn tượng về tất cả các tình huống và giải pháp phải như thế nào, và chính xác cách phán quyết đó sẽ được biện minh sẽ phụ thuộc rất nhiều vào bối cảnh. Thật vậy, nó có thể không chính đáng theo bất kỳ nguyên tắc chung nào, ngoại trừ để khẳng định "Tôi đủ tuổi để xem loại công việc này, mà tôi quen thuộc, làm tốt hơn"!
EDIT: đã chấp nhận một chỉnh sửa, từ chối một chỉnh sửa khác và hiện đã thực hiện chỉnh sửa của riêng tôi, bây giờ tôi có thể xem xét định dạng và dấu chấm câu trong danh sách quy tắc của mình để được giải quyết một lần và mãi mãi haha!