Đây là khá nhiều quy tắc định dạng mã duy nhất mà tôi đã tìm thấy thực sự có tác động đáng chú ý đến khả năng đọc và hầu như không mất công sức (giả sử trình soạn thảo mã của bạn không bắt đầu cuộc chiến với bạn về nó).
Đó là thiết kế ngôn ngữ lập trình tốt để có tên xuất hiện ở vị trí nhất quán trong khai báo / định nghĩa. Cơ sở lý luận rất đơn giản: bạn có một mỏ neo trực quan đẹp (nẹp xoăn hoặc chỉ là một vết lõm treo) mà bạn có thể sử dụng để tìm ngay phần đầu của tên. Bạn không cần phải phân tích ngôn ngữ khi quét qua tệp tìm tên.
Nó giống như khi bạn định dạng một tài liệu: khi bạn bắt đầu một phần mới, bạn đặt tên lên phía trước in đậm - thường trên dòng riêng của nó - không bị chôn vùi ở đâu đó, không phân biệt, trong một câu dài.
Đầu C có chữ ký rất ngắn gọn: kiểu trả về là tùy chọn và kiểu đối số được khai báo sau chữ ký. Tên cũng có xu hướng rất ngắn. Điều này giảm nhẹ tác động của việc có một loại trả lại thỉnh thoảng bù đắp tên.
double dot(x, y);
Vẫn còn tiêu hóa.
C ++ làm cho điều này tồi tệ hơn một chút. Nó chuyển các đặc tả loại đối số thành chữ ký làm cho chữ ký dài hơn. Cú pháp này sau đó đã được thông qua trong quá trình tiêu chuẩn hóa C.
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
ít tiêu hóa, nhưng không quá tệ. (Trích từ Git)
Bây giờ hãy xem xét các thực tiễn lập trình hiện đại với các tên dài, mô tả và các loại tham số và xem lựa chọn này đã trở thành thảm họa như thế nào. Một ví dụ từ tiêu đề Boost:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
Nếu bạn đang viết mã chung, chữ ký như thế thậm chí không bình thường. Bạn có thể tìm thấy các ví dụ về các trường hợp tồi tệ hơn nhiều so với điều này mà không cần cố gắng quá nhiều.
C, C ++ và các dẫn xuất của chúng, Java và C #, dường như là ngoại lệ để có các khai báo / định nghĩa có thể đọc được. Người tiền nhiệm và đồng nghiệp nổi tiếng của họ (Fortran, ALGOL, Pascal) đã đặt tên trước các loại kết quả và, may mắn thay, nhiều người kế nhiệm của họ (Go, Scala, TypeScript và Swift để đặt tên cho một số) cũng đã chọn các cú pháp dễ đọc hơn.