2011-12-23 28 views
8

Trong chuẩn mã hóa Delphi, quy tắc để thêm tiền tố A trước tên tham số trong các hàm/thủ tục là gì?Tại sao một số tham số được đặt trước bằng dấu "A" trong Delphi?

Ví dụ:

constructor Create(AOwner: TComponent); override; 
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); virtual; 
procedure AddAncestor(Component: TComponent); //No A prefix, why? 

function FindClass(const ClassName: string): TPersistentClass; //No A prefix, why? 
function GetClass(const AClassName: string): TPersistentClass; 
procedure StartClassGroup(AClass: TPersistentClass); 
procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass); 

Tôn hơn ví dụ là trong lớp học chung Delphi (xem lớp học, hình thức, vv). Do đó câu hỏi của tôi - quy tắc khi thêm và khi nào thì không?

+0

Trong mã của tôi, cá nhân tôi luôn thêm ** A ** để tách đầu vào khỏi đầu ra của trường, dưới dạng thói quen, nhưng tôi muốn biết nguồn gốc của điều này. – Kromster

Trả lời

6

Việc này thường được thực hiện khi có sự xung đột tên. Ví dụ trong hàm dựng TComponent tưởng tượng nếu nó được viết:

constructor TComponent.Create(Owner: TComponent) 

Bây giờ tham số Chủ sở hữu ẩn thuộc tính Chủ sở hữu của cá thể. Để tham khảo tài sản, bạn sẽ phải viết Self.Owner.

Có thể bạn sẽ tìm thấy, trong các nguồn VCL, tiền tố A được sử dụng khi có xung đột như vậy và không được sử dụng khi không có. Nhưng sẽ có sự mâu thuẫn trong việc áp dụng quy ước này.

Tôi thà rằng Embarcadero Pascal style guide sẽ nói điều gì đó về vấn đề này, nhưng thật đáng buồn là nó vẫn im lặng.

Cá nhân tôi không bao giờ sử dụng tiền tố A trong mã mà tôi viết. Trong ẩn kinh nghiệm của tôi luôn luôn là tốt bởi vì những gì bạn thường muốn tham chiếu là tham số chứ không phải là thành viên cá thể. Nếu bạn cần phải tham khảo thành viên cá thể thì Self.Name có thể phân biệt.

Vì vậy, không có quy tắc, chỉ quy ước được xác định theo sở thích cá nhân. Làm cho sự lựa chọn của riêng bạn và dính vào nó. Tính thống nhất quan trọng hơn nhiều so với việc bạn có chọn tham gia sử dụng quy ước đặt tên như vậy hay không.

+1

Nói chung khi tôi chạy vào kịch bản đó trong một hàm tạo, tôi chỉ gán cho trường sao lưu thay vì thuộc tính. –

+1

@Mason Điều đó thường xảy ra. Nhưng đôi khi bạn muốn setter để chạy quá. –

+0

Không vi phạm đến Serg, nhưng câu trả lời này đi sâu để giải thích nguồn gốc, không chỉ nghĩa đen. Đã chấp nhận. – Kromster

17

'A' dành cho 'Đối số'. Ngoài ra, 'F' là cho 'Trường', 'T' là cho 'Loại', 'E' là cho 'Ngoại lệ', 'Tôi' là dành cho 'Giao diện'.

Không có quy tắc nào khi thêm tiền tố 'A' và khi nào thì không.

+0

Bạn bỏ L từ danh sách –

+0

@David Heffernan tại sao L – VibeeshanRC

+2

@vibeeshan mã VCL hiện đại sử dụng L làm tiền tố cho biến cục bộ –

Các vấn đề liên quan