Những gì bạn thực sự muốn là loại bỏ các tham chiếu quảng cáo đến các hằng số, cho dù chúng được đặt tên hay để trần:
for_each_chess_square (row, col) {
/*...*/
}
Nếu bạn thực sự sẽ sinh sôi nảy nở hằng số bằng cách lặp lại các vòng lặp như vậy và không có gì, tốt nhất là nên gắn bó 8
.
8
là tự mô tả; nó không phải là một macro đại diện cho một cái gì đó khác.
Bạn không bao giờ Gonna (TM) biến nó thành một chương trình cờ vua 9x9 và nếu bạn từng làm thế, sự phổ biến của 8 sẽ không phải là khó khăn lớn.
Chúng tôi có thể tìm kiếm cơ sở mã 150.000 dòng cho mã thông báo 8 và phân loại các lần xuất hiện có nghĩa là gì trong vài giây.
Quan trọng hơn nhiều là mô đun hóa mã để kiến thức cờ vua được tập trung ở càng ít nơi càng tốt. Tốt hơn là nên có một, hai, có thể ba mô-đun dành riêng cho cờ vua, trong đó có 8 mô-đun theo nghĩa đen xảy ra, hơn ba mươi bảy mô-đun có trách nhiệm dành riêng cho cờ vua, đề cập đến 8 thông qua một tên tượng trưng.
Khi hoặc nếu 8 hằng số này trở thành một nguồn căng thẳng trong chương trình của bạn, bạn có thể dễ dàng khắc phục nó tại thời điểm đó. Khắc phục sự cố thực sự đang xảy ra bây giờ. Nếu bạn không cảm thấy rằng mình bị cản trở bởi 8 điều đặc biệt đó, hãy đi theo bản năng đó.
Giả sử rằng trong tương lai bạn muốn hỗ trợ kích thước bảng thay thế. Trong trường hợp đó, các vòng lặp đó sẽ phải thay đổi cho dù chúng sử dụng hằng số được đặt tên hay 8
, bởi vì kích thước sẽ được truy xuất bởi một số biểu thức như board.width
và board.height
. Nếu bạn có BOARD_SIZE
thay vì 8
, những nơi này sẽ dễ dàng tìm thấy hơn. Vì vậy, đó là ít nỗ lực. Tuy nhiên, bạn không được quên về nỗ lực thay thế 8
bằng BOARD_SIZE
ở nơi đầu tiên. Nỗ lực chung không thấp. Đã có một đường chuyền so với mã để thay đổi 8
để BOARD_SIZE
, và sau đó khác để hỗ trợ kích thước thay thế, không phải là rẻ hơn so với chỉ đi từ 8
để hỗ trợ chiều thay thế.
Chúng ta cũng có thể xem xét điều này từ một phân tích rủi ro / lợi ích khách quan hoàn toàn lạnh lùng. Chương trình có hằng số trần trong đó bây giờ. Nếu những cái này được thay thế bởi một hằng số, không có lợi ích; chương trình này giống hệt nhau. Với bất kỳ thay đổi, có một rủi ro khác không. Trong trường hợp này, nó là nhỏ. Tuy nhiên, không có rủi ro nên được thực hiện mà không có lợi ích. Để "bán" sự thay đổi khi đối mặt với lý do này, chúng ta phải đưa ra giả thuyết về một lợi ích: một lợi ích trong tương lai sẽ giúp với một chương trình khác: một phiên bản tương lai của chương trình hiện không tồn tại. Nếu một chương trình như vậy đang được lên kế hoạch, giả thuyết này và lý do liên quan của nó là đúng đắn và cần được thực hiện nghiêm túc.
Chẳng hạn, nếu bạn không muốn thêm nhiều mã sẽ sinh sôi nảy nở thêm các hằng số này, bạn có thể muốn loại bỏ chúng. Nếu các thể hiện của hằng số xấp xỉ tất cả các thể hiện sẽ tồn tại thì tại sao phải bận tâm.
Nếu bạn từng làm việc trên phần mềm thương mại, các đối số ROI cũng sẽ được áp dụng. Nếu một chương trình không bán được và việc thay đổi một số số được mã hóa cứng thành hằng số sẽ không cải thiện doanh số, bạn sẽ không được đền bù cho nỗ lực này. Sự thay đổi có lợi tức bằng không đối với đầu tư của thời gian. Đối số ROI khái quát hóa ngoài tiền. Bạn đã viết một chương trình, đầu tư thời gian và công sức và nhận được một cái gì đó từ đó: đó là tiền lãi của bạn, "R" của bạn. Nếu bằng cách thực hiện thay đổi đó một mình, bạn sẽ nhận được nhiều hơn "R", bất kể đó là gì, bằng mọi cách. Nếu bạn có một số kế hoạch để phát triển hơn nữa và sự thay đổi đó sẽ cải thiện "R" của bạn, ditto. Nếu thay đổi không có "R" ngay lập tức hoặc có thể thấy được cho bạn, hãy quên nó đi.