Perl - Tiêu chuẩn mã hóa
Tất nhiên, mỗi lập trình viên sẽ có sở thích riêng về định dạng, nhưng có một số nguyên tắc chung sẽ giúp chương trình của bạn dễ đọc, dễ hiểu và dễ bảo trì hơn.
Điều quan trọng nhất là luôn chạy các chương trình của bạn dưới cờ -w. Bạn có thể tắt nó một cách rõ ràng cho các phần mã cụ thể thông qua pragma không có cảnh báo hoặc biến $ ^ W nếu bạn phải. Bạn cũng nên luôn sử dụng nghiêm ngặt hoặc biết lý do tại sao không. Việc sử dụng sigtrap và thậm chí sử dụng pragmas chẩn đoán cũng có thể hữu ích.
Về tính thẩm mỹ của bố cục mã, điều duy nhất Larry quan tâm mạnh mẽ là dấu ngoặc nhọn đóng của BLOCK nhiều dòng phải phù hợp với từ khóa bắt đầu cấu trúc. Ngoài ra, anh ấy có những sở thích khác không quá mạnh -
- Thụt lề 4 cột.
- Mở dấu xoăn trên cùng một dòng với từ khóa, nếu có thể, nếu không thì xếp hàng.
- Khoảng trắng trước dấu mở đầu của BLOCK nhiều dòng.
- KHỐI một dòng có thể được đặt trên một dòng, bao gồm cả các đường cong.
- Không có khoảng trắng trước dấu chấm phẩy.
- Dấu chấm phẩy bị bỏ qua trong KHỐI một dòng "ngắn".
- Không gian xung quanh hầu hết các nhà khai thác.
- Khoảng trắng xung quanh một chỉ số dưới "phức tạp" (bên trong dấu ngoặc).
- Các dòng trống giữa các phần làm những việc khác nhau.
- Elses vô duyên.
- Không có khoảng cách giữa tên hàm và dấu ngoặc đơn mở đầu của nó.
- Dấu cách sau mỗi dấu phẩy.
- Các dòng dài bị ngắt sau một toán tử (ngoại trừ và và hoặc).
- Dấu cách sau khi đối sánh dấu ngoặc đơn cuối cùng trên dòng hiện tại.
- Xếp các mục tương ứng theo chiều dọc.
- Bỏ qua các dấu câu thừa miễn là sự rõ ràng không bị ảnh hưởng.
Dưới đây là một số vấn đề khác về phong cách thực chất hơn cần suy nghĩ: Chỉ vì bạn CÓ THỂ làm điều gì đó theo một cách cụ thể không có nghĩa là bạn NÊN làm theo cách đó. Perl được thiết kế để cung cấp cho bạn một số cách để làm bất cứ điều gì, vì vậy hãy cân nhắc chọn cách dễ đọc nhất. Ví dụ -
open(FOO,$foo) || die "Can't open $foo: $!";
Tốt hơn -
die "Can't open $foo: $!" unless open(FOO,$foo);
Bởi vì cách thứ hai ẩn điểm chính của câu lệnh trong một bổ ngữ. Mặt khác,
print "Starting analysis\n" if $verbose;
Tốt hơn -
$verbose && print "Starting analysis\n";
Bởi vì điểm chính không phải là người dùng có gõ -v hay không.
Đừng đi qua những biến đổi ngớ ngẩn để thoát khỏi một vòng lặp ở trên cùng hoặc dưới cùng, khi Perl cung cấp toán tử cuối cùng để bạn có thể thoát ở giữa. Chỉ cần "vượt trội" nó một chút để hiển thị rõ hơn -
LINE:
for (;;) {
statements;
last LINE if $foo;
next LINE if /^#/;
statements;
}
Hãy xem một số điểm quan trọng khác -
Đừng ngại sử dụng các nhãn vòng lặp - chúng ở đó để tăng cường khả năng đọc cũng như cho phép ngắt vòng lặp đa cấp. Xem ví dụ trước.
Tránh sử dụng grep () (hoặc map ()) hoặc `backticks` trong bối cảnh trống, tức là khi bạn chỉ vứt bỏ các giá trị trả về của chúng. Các hàm đó đều có giá trị trả về, vì vậy hãy sử dụng chúng. Nếu không, hãy sử dụng vòng lặp foreach () hoặc hàm system () để thay thế.
Để có tính di động, khi sử dụng các tính năng có thể không được triển khai trên mọi máy, hãy kiểm tra cấu trúc trong đánh giá để xem nó có bị lỗi không. Nếu bạn biết phiên bản hoặc mức vá lỗi mà một tính năng cụ thể đã được triển khai, bạn có thể kiểm tra $] ($ PERL_VERSION bằng tiếng Anh) để xem nó có ở đó hay không. Mô-đun Cấu hình cũng sẽ cho phép bạn thẩm vấn các giá trị được xác định bởi chương trình Cấu hình khi Perl được cài đặt.
Chọn số nhận dạng dễ nhớ. Nếu bạn không thể nhớ nghĩa là gì, bạn đã gặp vấn đề.
Mặc dù các số nhận dạng ngắn như $ gotit có thể ổn, nhưng hãy sử dụng dấu gạch dưới để tách các từ trong các số nhận dạng dài hơn. Nói chung, đọc $ var_names_like_this dễ dàng hơn $ VarNamesLikeThis, đặc biệt đối với những người nói tiếng Anh không phải là bản ngữ. Đây cũng là một quy tắc đơn giản hoạt động nhất quán với VAR_NAMES_LIKE_THIS.
Tên gói đôi khi là một ngoại lệ đối với quy tắc này. Perl dành riêng một cách không chính thức tên mô-đun chữ thường cho các mô-đun "pragma" như số nguyên và nghiêm ngặt. Các mô-đun khác nên bắt đầu bằng một chữ cái viết hoa và sử dụng chữ hoa và chữ thường, nhưng có thể không có dấu gạch dưới do hạn chế trong cách biểu diễn tên mô-đun của hệ thống tệp nguyên thủy là tệp phải vừa với một vài byte thưa thớt.
Nếu bạn có một biểu thức chính quy thực sự rậm rạp, hãy sử dụng công cụ sửa đổi / x và thêm một số khoảng trắng để làm cho nó trông ít giống nhiễu dòng hơn một chút. Không sử dụng dấu gạch chéo làm dấu phân cách khi regexp của bạn có dấu gạch chéo hoặc dấu gạch chéo ngược.
Luôn kiểm tra mã trả lại của các cuộc gọi hệ thống. Thông báo lỗi tốt sẽ được chuyển đến STDERR, bao gồm chương trình nào gây ra sự cố, lệnh gọi hệ thống không thành công và các đối số là gì và (RẤT QUAN TRỌNG) phải chứa thông báo lỗi hệ thống tiêu chuẩn cho những gì đã xảy ra. Đây là một ví dụ đơn giản nhưng đầy đủ -
opendir(D, $dir) or die "can't opendir $dir: $!";
Suy nghĩ về khả năng tái sử dụng. Tại sao phải lãng phí chất xám vào một cú đánh trong khi bạn có thể muốn làm lại điều gì đó như vậy? Xem xét việc tổng quát hóa mã của bạn. Xem xét việc viết một mô-đun hoặc lớp đối tượng. Cân nhắc làm cho mã của bạn chạy rõ ràng với các cảnh báo sử dụng nghiêm ngặt và sử dụng (hoặc -w) có hiệu lực. Cân nhắc việc tặng mã của bạn. Cân nhắc thay đổi toàn bộ thế giới quan của bạn. Hãy xem xét ... oh, đừng bận tâm.
Hãy kiên định.
Hãy tử tế.