Trong một dự án gần đây, tôi cần chuyển đổi từ byte sang kilobyte kibibyte . Mã này đủ đơn giản:
var kBval = byteVal / 1024;
Sau khi viết nó, tôi đã làm cho phần còn lại của chức năng hoạt động và chuyển sang.
Nhưng sau này, tôi bắt đầu tự hỏi liệu tôi có nhúng số ma thuật vào mã của mình không. Một phần trong tôi nói rằng nó ổn vì số này là một hằng số cố định và nên dễ hiểu. Nhưng một phần khác của tôi nghĩ rằng nó sẽ cực kỳ rõ ràng nếu được bọc trong một hằng số xác định như thế nào BYTES_PER_KBYTE
.
Vì vậy, những con số là hằng số nổi tiếng có thực sự kỳ diệu hay không?
Câu hỏi liên quan:
Khi nào một số là một số ma thuật? và Có phải mọi số trong mã được coi là "số ma thuật"? - tương tự, nhưng là những câu hỏi rộng hơn nhiều so với những gì tôi đang hỏi. Câu hỏi của tôi tập trung vào các số không đổi nổi tiếng không được giải quyết trong các câu hỏi đó.
Loại bỏ số ma thuật: Khi nào là lúc nói "Không"? cũng liên quan, nhưng tập trung vào tái cấu trúc trái ngược với việc một số không đổi có phải là số ma thuật hay không.
1024
, bởi vì nếu không, nhóm nhà phát triển của bạn sẽ dành tất cả thời gian để tranh luận về thời tiết đó là "kilobytes" hoặc "kibibytes".
#define
KIBI
là 1024, MEBI
như 1024 * 1024,
ZERO=0, ONE=1, TWO=2
và khi chương trình được chuyển sang ngôn ngữ khác (hoặc các lập trình viên không thay đổi hành vi khi chuyển đổi ngôn ngữ của họ), bạn sẽ thấy nó có quá và bạn phải cầu nguyện mà không bao giờ một người nào đó thay đổi nó để ONE=2
...
FOUR_HUNDRED_FOUR = 404
. Tôi đã làm việc cho một dự án khác, nơi họ là chiến binh về việc sử dụng các chuỗi không đổi thay vì chữ, vì vậy họ có hàng chục dòng mã trông giống như,DATABASE = "database"