Nhu cầu bình luận tỷ lệ nghịch với mức độ trừu tượng của mã.
Ví dụ, ngôn ngữ hội là, đối với hầu hết các mục đích thực tế, không thể hiểu được mà không có ý kiến. Đây là một đoạn trích từ một chương trình nhỏ có thể tính toán và in các thuật ngữ của chuỗi Fibonacci :
main:
; initializes the two numbers and the counter. Note that this assumes
; that the counter and num1 and num2 areas are contiguous!
;
mov ax,'00' ; initialize to all ASCII zeroes
mov di,counter ; including the counter
mov cx,digits+cntDigits/2 ; two bytes at a time
cld ; initialize from low to high memory
rep stosw ; write the data
inc ax ; make sure ASCII zero is in al
mov [num1 + digits - 1],al ; last digit is one
mov [num2 + digits - 1],al ;
mov [counter + cntDigits - 1],al
jmp .bottom ; done with initialization, so begin
.top
; add num1 to num2
mov di,num1+digits-1
mov si,num2+digits-1
mov cx,digits ;
call AddNumbers ; num2 += num1
mov bp,num2 ;
call PrintLine ;
dec dword [term] ; decrement loop counter
jz .done ;
; add num2 to num1
mov di,num2+digits-1
mov si,num1+digits-1
mov cx,digits ;
call AddNumbers ; num1 += num2
.bottom
mov bp,num1 ;
call PrintLine ;
dec dword [term] ; decrement loop counter
jnz .top ;
.done
call CRLF ; finish off with CRLF
mov ax,4c00h ; terminate
int 21h ;
Ngay cả với các bình luận, nó có thể khá phức tạp để mò mẫm.
Ví dụ hiện đại: Regexes thường là các cấu trúc trừu tượng rất thấp (chữ thường, số 0, 1, 2, dòng mới, v.v.). Họ có thể cần bình luận dưới dạng mẫu (Bob Martin, IIRC, không thừa nhận điều này). Đây là một biểu thức chính mà (tôi nghĩ) phải phù hợp với các URL HTTP (S) và FTP:
^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|m
+il|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.
+\,\;\?\'\\\+&%\$#\=~_\-]+))*$
Khi các ngôn ngữ tăng lên hệ thống phân cấp trừu tượng, lập trình viên có thể sử dụng các tóm tắt gợi mở (tên biến, tên hàm, tên lớp, tên mô-đun, giao diện, gọi lại, v.v.) để cung cấp tài liệu tích hợp. Bỏ bê để tận dụng lợi thế này, và sử dụng các bình luận để viết lên nó là sự lười biếng, một sự bất đồng và thiếu tôn trọng người bảo trì.
Tôi đang nghĩ đến việc Bí quyết Numerical trong C dịch chủ yếu là nguyên văn để Bí quyết Numerical trong C ++ , mà tôi suy ra bắt đầu như Bí quyết Numerical (trong FORTAN), với tất cả các biến a
, aa
, b
, c
, cc
, vv được duy trì qua từng phiên bản. Các thuật toán có thể đã đúng, nhưng chúng không tận dụng được sự trừu tượng mà các ngôn ngữ cung cấp. Và họ làm tôi thất vọng. Mẫu từ một bài viết của Tiến sĩ Dobbs - Biến đổi Fourier nhanh :
void four1(double* data, unsigned long nn)
{
unsigned long n, mmax, m, j, istep, i;
double wtemp, wr, wpr, wpi, wi, theta;
double tempr, tempi;
// reverse-binary reindexing
n = nn<<1;
j=1;
for (i=1; i<n; i+=2) {
if (j>i) {
swap(data[j-1], data[i-1]);
swap(data[j], data[i]);
}
m = nn;
while (m>=2 && j>m) {
j -= m;
m >>= 1;
}
j += m;
};
// here begins the Danielson-Lanczos section
mmax=2;
while (n>mmax) {
istep = mmax<<1;
theta = -(2*M_PI/mmax);
wtemp = sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi = sin(theta);
wr = 1.0;
wi = 0.0;
for (m=1; m < mmax; m += 2) {
for (i=m; i <= n; i += istep) {
j=i+mmax;
tempr = wr*data[j-1] - wi*data[j];
tempi = wr * data[j] + wi*data[j-1];
data[j-1] = data[i-1] - tempr;
data[j] = data[i] - tempi;
data[i-1] += tempr;
data[i] += tempi;
}
wtemp=wr;
wr += wr*wpr - wi*wpi;
wi += wi*wpr + wtemp*wpi;
}
mmax=istep;
}
}
Trong trường hợp đặc biệt về tính trừu tượng, mọi ngôn ngữ đều có các thành ngữ / đoạn mã chính tắc cho một số tác vụ phổ biến nhất định (xóa danh sách liên kết động trong C) và bất kể chúng trông như thế nào, chúng không nên được ghi lại. Các lập trình viên nên học những thành ngữ này, vì chúng không phải là một phần không chính thức của ngôn ngữ.
Vì vậy, mang đi: Mã không thành ngữ được xây dựng từ các khối xây dựng cấp thấp không thể tránh được nhu cầu bình luận. Và điều này là cần thiết WAAAAY ít hơn nó xảy ra.