Đây là một chủ đề gây tranh cãi, và tôi đoán có nhiều ý kiến như có các lập trình viên. Nhưng vì lợi ích của nó, tôi muốn biết những thông lệ phổ biến trong kinh doanh (hoặc tại nơi làm việc của bạn) là gì.
Ở nơi làm việc của tôi, chúng tôi có một hướng dẫn mã hóa nghiêm ngặt. Một phần trong đó dành riêng cho chuỗi / số ma thuật. Nó tuyên bố (cho C #):
Không sử dụng các giá trị bằng chữ, số hoặc chuỗi, trong mã của bạn ngoài việc xác định các hằng số ký hiệu. Sử dụng mẫu sau để xác định hằng số:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Có các trường hợp ngoại lệ: các giá trị 0, 1 và null gần như luôn có thể được sử dụng một cách an toàn. Rất thường các giá trị 2 và -1 cũng ổn. Chuỗi dành cho đăng nhập hoặc theo dõi được miễn quy tắc này. Nghĩa đen được cho phép khi ý nghĩa của chúng rõ ràng từ bối cảnh, và không chịu sự thay đổi trong tương lai.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Một tình huống lý tưởng sẽ là một số tài liệu nghiên cứu chính thức cho thấy hiệu ứng về khả năng đọc / duy trì mã khi:
- Số / chuỗi ma thuật ở khắp mọi nơi
- Các chuỗi / số ma thuật được thay thế bằng các khai báo liên tục một cách hợp lý (hoặc ở các mức độ bao phủ khác nhau) - và xin đừng hét vào tôi vì đã sử dụng "hợp lý", tôi biết mọi người đều có ý tưởng khác nhau "hợp lý" là gì
- Các chuỗi / số ma thuật được xếp chồng lên nhau và ở những nơi không cần phải có (xem ví dụ của tôi dưới đây)
Tôi muốn làm điều này để có một số lập luận dựa trên cơ sở khoa học khi tranh luận với một trong những đồng nghiệp của tôi, người sẽ đi đến điểm tuyên bố các hằng số như:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Một ví dụ khác sẽ là (và ví dụ này là trong JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Bạn có dán ID DOM trên đầu tệp javascript của mình không nếu ID đó chỉ được sử dụng ở 1 vị trí?
Tôi đã đọc các chủ đề sau:
StackExchange
StackOverflow
Bytes Cộng đồng CNTT
Có nhiều bài viết khác, và sau khi đọc một số mẫu này xuất hiện.
Vì vậy, câu hỏi của tôi là có nên sử dụng chuỗi và số ma thuật trong mã của chúng tôi? Tôi đặc biệt tìm kiếm các câu trả lời chuyên gia được hỗ trợ bởi các tài liệu tham khảo nếu có thể.
NumberTen = 10
Điều đó là vô nghĩa vì số 10 sẽ không được xác định lại. MaxRetryCount = 10
Điều đó có một điểm chúng ta có thể muốn thay đổi số lần thử lại tối đa. private const char SemiColon = ';';
Câm. private const char LineTerminator = ';'
; Thông minh.