Rất rõ ràng nếu bạn đọc câu đầu tiên của câu hỏi rằng câu hỏi này không phải là về cách sử dụng phù hợp như
loại bỏ các con số ma thuật , đó là về sự
nhất quán ngu ngốc vô tâm khủng khiếp nhất. Đó là những gì câu trả lời này giải quyết
Ý thức thông thường cho bạn biết rằng const char UPPER_CASE_A = 'A';
hoặc const char A = 'A'
không thêm bất cứ điều gì ngoài bảo trì và độ phức tạp vào hệ thống của bạn. const char STATUS_CODE.ARRIVED = 'A'
là một trường hợp khác nhau.
Các hằng số được cho là đại diện cho những thứ bất biến trong thời gian chạy, nhưng có thể cần phải được sửa đổi trong tương lai vào thời gian biên dịch. Khi nào const char A =
chính xác bằng bất cứ điều gì khác hơn A
?
Nếu bạn thấy public static final char COLON = ':'
trong mã Java, hãy tìm bất cứ ai viết nó và phá vỡ bàn phím của họ. Nếu đại diện cho COLON
từng thay đổi từ :
bạn sẽ có một cơn ác mộng bảo trì.
Obfuscation:
Điều gì xảy ra khi ai đó thay đổi nó COLON = '-'
bởi vì nơi họ đang sử dụng nó cần -
thay thế ở mọi nơi? Bạn có định viết các bài kiểm tra đơn vị về cơ bản nói assertThat(':' == COLON)
cho từng const
tham chiếu để đảm bảo chúng không bị thay đổi không? Chỉ để có người sửa bài kiểm tra khi họ thay đổi chúng?
Nếu ai đó thực sự lập luận rằng public static final String EMPTY_STRING = "";
nó hữu ích và có lợi, bạn chỉ cần đủ điều kiện kiến thức của họ và bỏ qua chúng một cách an toàn trên mọi thứ khác.
Có sẵn mọi ký tự có thể in với một phiên bản được đặt tên chỉ chứng tỏ rằng bất kỳ ai đã làm điều đó, không đủ điều kiện để viết mã không được giám sát.
Sự gắn kết:
Nó cũng làm giảm sự gắn kết một cách giả tạo, bởi vì nó di chuyển mọi thứ ra khỏi những thứ sử dụng chúng và có liên quan đến chúng.
Trong lập trình máy tính, sự gắn kết liên quan đến mức độ mà các yếu tố của một mô-đun thuộc về nhau. Do đó, sự gắn kết đo lường sức mạnh của mối quan hệ giữa các phần chức năng trong một mô-đun nhất định. Ví dụ, trong chức năng hệ thống gắn kết cao có liên quan mạnh mẽ.
Khớp nối:
Nó cũng kết hợp rất nhiều lớp không liên quan với nhau vì tất cả chúng đều kết thúc các tệp tham chiếu không thực sự liên quan đến những gì chúng làm.
Khớp nối chặt chẽ là khi một nhóm các lớp phụ thuộc nhiều vào nhau. Kịch bản này phát sinh khi một lớp đảm nhận quá nhiều trách nhiệm hoặc khi một mối quan tâm được trải rộng trên nhiều lớp thay vì có lớp riêng.
Nếu bạn đã sử dụng một tên tốt hơn như DELIMITER = ','
bạn vẫn sẽ có cùng một vấn đề, bởi vì tên này là chung chung và không mang ngữ nghĩa. Việc gán lại giá trị không còn giúp phân tích tác động hơn là tìm kiếm và thay thế cho nghĩa đen ','
. Bởi vì một số mã sử dụng nó là gì và cần ,
một số mã khác sử dụng nhưng cần ;
ngay bây giờ? Vẫn phải xem xét mọi cách sử dụng bằng tay và thay đổi chúng.
Trong thế giới hoang dã:
Gần đây tôi đã cấu trúc lại một 1,000,000+ LOC
ứng dụng đã 18 tuổi. Nó có những thứ như thế public static final COMMA = SPACE + "," + SPACE;
. Điều đó là không có cách nào tốt hơn là chỉ nội tuyến " , "
ở nơi cần thiết.
Nếu bạn muốn tranh luận về tính dễ đọc, bạn cần học cách định cấu hình IDE của mình để hiển thị các whitespace
ký tự mà bạn có thể nhìn thấy chúng hoặc bất cứ điều gì, đó chỉ là một lý do cực kỳ lười biếng để đưa entropy vào hệ thống.
Nó cũng đã ,
định nghĩa nhiều lần với nhiều lỗi chính tả của từ COMMA
trong nhiều gói và lớp. Với các tham chiếu đến tất cả các biến thể được trộn lẫn với nhau trong mã. Không có gì là ác mộng khi thử và sửa một cái gì đó mà không phá vỡ thứ gì đó hoàn toàn không liên quan.
Cùng với bảng chữ cái, có nhiều UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
mà hầu hết thời gian là tương đương A
nhưng trong một số trường hợp là không . Đối với hầu hết mọi nhân vật, nhưng không phải tất cả các nhân vật.
Và từ lịch sử chỉnh sửa, có vẻ như một trong số đó đã từng được chỉnh sửa hoặc thay đổi trong suốt 18 năm, bởi vì lý do rõ ràng bây giờ là nó sẽ phá vỡ quá nhiều thứ không thể kiểm soát được, do đó bạn có biến mới những cái tên chỉ vào cùng một thứ không bao giờ có thể thay đổi vì cùng một lý do.
Không có thực tế lành mạnh, bạn có thể lập luận rằng thực tế này không làm gì cả mà bắt đầu từ entropy tối đa.
Tôi đã tái cấu trúc tất cả mớ hỗn độn này và đưa ra tất cả các tautology và tuyển dụng đại học mới có năng suất cao hơn nhiều vì họ không phải tìm kiếm nhiều cấp độ của những điều mà các const
tài liệu tham khảo này thực sự chỉ ra, vì họ không đáng tin vào những gì họ được đặt tên vs những gì họ chứa.