Điểm làm cho một sự phân biệt cú pháp giữa các loại tiêu chuẩn và người dùng xác định là gì?


13

Mặc dù ở đây tôi sẽ đề cập cụ thể đến các quy ước đặt tên của C ++ và Bjarne Stroustrup , về nguyên tắc, tôi đã thấy rằng mọi người sử dụng các quy tắc tương tự cho các ngôn ngữ khác ở đây và ở đó.

Vì vậy, ý tưởng cơ bản là người ta sẽ có thể phân biệt các loại tiêu chuẩn với các loại do người dùng xác định trong khi đọc mã. Chẳng hạn, Bjarne Stroustrup gợi ý rằng một người sử dụng

một chữ cái viết hoa ban đầu cho các loại (ví dụ: Hình vuông và Đồ thị)

trong đó, có tính đến

Ngôn ngữ C ++ và thư viện chuẩn không sử dụng chữ in hoa

cho phép đạt được mục tiêu nêu trên.

Nhưng tại sao chúng ta cần phải làm như vậy? Điều gì có thể là mục đích để phân biệt các loại tiêu chuẩn và người dùng xác định?

Tôi không thể tìm thấy bất kỳ lý do nào của Bjarne Stroustrup về vấn đề đó, và bên cạnh đó, bản thân tôi cũng nghĩ theo cách ngược lại. : DI biết, tôi biết, "Tôi là ai để tranh chấp Stroustrup?" Nhưng, hãy lắng nghe, một loạt các tính năng ngôn ngữ C ++, ví dụ như quá tải toán tử, phục vụ mục đích cho phép các loại do người dùng xác định một mức hỗ trợ cú pháp tương tự như các loại tiêu chuẩn. Và sau đó tất cả những điều này bị cản trở bởi một kỷ luật đặt tên khác ...

PS Không đề cập đến việc thường một từ là không đủ để đặt tên cho một lớp và một từ được phân tách bằng dấu gạch dưới bắt đầu bằng chữ in hoa trông rất xa lạ.


6
Cuối cùng, bạn cũng có thể gọi nó là một dạng Ký hiệu Hungary (nghĩa là nhúng thông tin về loại / cách sử dụng trong tên), thường được sử dụng. Do đó: câu hỏi hay.
stijn

2
@stijn: Vâng, nhưng bạn có biết tại sao nó lại nhăn mặt không? Trước đây, khi mọi người sử dụng trình soạn thảo văn bản để viết chương trình của họ, thật hữu ích khi biết loại bằng cách nhìn vào mã định danh. Nhưng ngày nay, bạn chỉ có thể di chuột qua mã định danh trong bất kỳ IDE hiện đại nào và nó sẽ cho bạn biết loại.
Robert Harvey

4
@RobertHarvey Ngoại trừ ký hiệu Hungary cũng được sử dụng trong các cộng đồng không có IDE mạnh mẽ, hay nói đúng hơn, chủ yếu sử dụng các trình soạn thảo văn bản thuần túy.

1
@RobertHarvey Không, tôi biết cả hai ("ứng dụng Hungary" và "hệ thống Hungary"), và theo kinh nghiệm của tôi, không phổ biến, ví dụ như Python và Rust.

3
@RobertHarvey Bạn đang nói ký hiệu Hungary chỉ tồn tại trong C, C ++ và VB? Bất kể, quan điểm của tôi là đặt câu hỏi về lý do bạn đưa ra vì nó bị cau mày (rằng nó chỉ dư thừa vì chúng tôi có các IDE cho bạn biết loại đó) vì lý do đó không áp dụng cho các ngôn ngữ không có ID đó và, bởi lý luận của bạn, nên được hưởng lợi từ Hungary. Python được gõ động không tạo ra sự khác biệt, trên thực tế, nó sẽ tăng cường lý luận vì thông thường người lập trình biết các loại khi viết mã, nhưng chúng không thể được suy luận tự động.

Câu trả lời:


5

Hoàn toàn không có mục đích hay lợi ích trong đó. Một trong những mục tiêu của C ++ là điều trị UDT và nguyên thủy thay thế cho nhau, và trong khi chúng chưa hoàn toàn thành công, đây là một lĩnh vực mà bạn không phải phân biệt.

Khi nói đến việc đặt tên, Stroustrup là một loại hạt, và đây là một thực tế đã được khoa học chứng minh.


2
Tôi sẽ thấy RAII của bạn và nâng cao cho bạn một SFINAE.
Robert Harvey

5
Tôi có thể thấy làm thế nào có thể hữu ích để phân biệt các loại tiêu chuẩn với UDT. Bạn không nên thay đổi mã trong thư viện tiêu chuẩn trừ khi bạn có lý do thực sự tốt, vì vậy việc nhìn thấy chữ thường cho thấy rằng bạn không cần phải xem mã bởi vì, đó là trong thư viện chuẩn.
Robert Harvey

4
@del Nam: Vâng. Điều đó không gì khác hơn là một lời kêu gọi chính quyền về phần "Nhiều người". Nếu "Nhiều người" muốn đến đây và thảo luận về lý do của họ, họ sẽ tự do làm điều đó và cho đến lúc đó, họ không có gì để thêm. FTR, tôi cũng sử dụng chữ hoa cho UDT ... nhưng cũng dành cho người nguyên thủy bất cứ khi nào tôi cần phải đặt bí danh cho họ.
DeadMG

2
@RobertHarvey: Điều đó giả định rằng bạn không thể nhận ra các loại Tiêu chuẩn trong tầm nhìn. Hoặc bằng cách di chuyển qua chúng trong môi trường của bạn và xem "std ::". Hoặc bằng cách sử dụng Đi đến Định nghĩa hoặc bất cứ điều gì. Về cơ bản, nó không áp dụng.
DeadMG

1
Tôi luôn nghĩ mục đích là để phân biệt với các loại tiêu chuẩn, trước khi xuất hiện các không gian tên. Ngày nay, nó chỉ là một di tích của suy nghĩ cũ (một "thực hành tốt nhất" đã ngừng tốt nhất một thời gian trước đây). FWIW, trong các dự án cá nhân của tôi, tôi sử dụng các chữ cái nhỏ snake_casecho các lớp và không gian tên của mình và không có vấn đề gì - hoặc nhầm lẫn - gây ra bởi điều này.
utnapistim

3

Các quy ước đặt tên là về việc hỗ trợ sự hiểu biết của con người (tức là lập trình viên và người bảo trì) về mã.

UDT có thể được chỉ định để khai báo các biến, khởi tạo, biểu thức và câu lệnh hoạt động trên chúng khác với trường hợp của các loại tiêu chuẩn. Đối với việc tìm kiếm vấn đề, rất hữu ích cho người bảo trì có một số gợi ý rằng một số phần mã có thể làm những điều thú vị (ví dụ: việc triển khai một loại tích phân do người dùng định nghĩa được sử dụng trong một số chức năng có thể có một lỗ hổng trong cách bổ sung).

Có nhiều cách để cung cấp tín hiệu như vậy (ý kiến, thông số kỹ thuật thiết kế, v.v.). Ưu điểm của quy ước đặt tên là chúng có mặt trong mã, trong khi các bình luận có thể bị bỏ qua, lỗi thời, v.v.


2

Một lý do tôi sử dụng các từ viết hoa cho các loại, là để phân biệt các biến với các loại. Điều này cho phép khai báo một biến với, ngoài chữ viết hoa, cùng tên:

Foo foo;
Graph graph;

Điều này có thể hữu ích cho các lớp chỉ có một phiên bản được sử dụng trong mỗi ngữ cảnh, ví dụ: cài đặt cấu hình.


IMHO này không trả lời câu hỏi trong tiêu đề. Có thể thêm "về mặt này, việc đặt tên các loại tiêu chuẩn bằng các chữ cái nhỏ chỉ để tương thích ngược với cstdlib".
Vorac
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.