Swift đã trưởng thành đáng kể trong những năm kể từ khi câu trả lời này được viết. Các hướng dẫn thiết kế hiện nay :
Các giao thức mô tả những gì nên đọc là danh từ (ví dụ Collection
).
Giao thức mô tả một khả năng nên được đặt tên bằng cách sử dụng hậu tố able
, ible
hay ing
(ví dụ Equatable
, ProgressReporting
).
Cảm ơn bạn David James đã phát hiện ra điều này!
Câu trả lời gốc
Sử dụng một số dạng Ký hiệu Hungary có thể là một ý tưởng hay - để thể hiện các khái niệm quan trọng không thể được mã hóa bên trong hệ thống loại. Tuy nhiên, thực tế là một số định danh đề cập đến một giao thức là một phần của hệ thống loại trong Swift (và C #), và do đó, bất kỳ tiền tố hoặc hậu tố nào cũng chỉ thêm tiếng ồn. Xóa các tiền tố hoặc hậu tố là một ý tưởng tốt hơn cho các khái niệm như ngoại lệ hoặc sự kiện.
Trong trường hợp không có hướng dẫn phong cách chính thức cho Swift, chúng tôi phải tự tìm ra hoặc mượn từ các hướng dẫn hoặc mã hiện có. Ví dụ: hướng dẫn kiểu Objective-C cho Ca cao chứa phần này:
Các giao thức nên được đặt tên theo cách họ hành vi nhóm:
Hầu hết các phương thức liên quan đến nhóm giao thức không liên quan đến bất kỳ lớp nào nói riêng. Loại giao thức này nên được đặt tên để giao thức không bị nhầm lẫn với một lớp. Một quy ước phổ biến là sử dụng một hình thức gerund (trực tuyến ... ing):
NSLocking
- Tốt.
NSLock
- Nghèo (có vẻ như là một tên cho một lớp học).
Một số giao thức nhóm một số phương thức không liên quan (thay vì tạo một số giao thức nhỏ riêng biệt). Các giao thức này có xu hướng được liên kết với một lớp là biểu thức chính của giao thức. Trong những trường hợp này, quy ước là cung cấp cho giao thức cùng tên với lớp.
Một ví dụ về loại giao thức này là NSObject
giao thức. Giao thức này nhóm các phương thức mà bạn có thể sử dụng để truy vấn bất kỳ đối tượng nào về vị trí của nó trong hệ thống phân cấp lớp, để làm cho nó gọi các phương thức cụ thể và để tăng hoặc giảm số tham chiếu của nó. Bởi vì NSObject
lớp cung cấp biểu thức chính của các phương thức này, giao thức được đặt tên theo lớp.
Tuy nhiên, lời khuyên của điểm thứ hai không còn được áp dụng:
Vì không gian tên của các lớp và giao thức được thống nhất trong Swift, NSObject
giao thức trong Objective-C được ánh xạ lại NSObjectProtocol
trong Swift. ( nguồn )
Ở đây, …Protocol
hậu tố đã được sử dụng để phân tán giao thức khỏi lớp.
Các Swift thư viện chuẩn chứa các giao thức Equatable
, Comparable
và Printable
. Những thứ này không sử dụng hình thức Cướp bóc của Cốt-lô, mà thay vào đó là hậu tố có thể ăn được của Cướp bắp để tuyên bố rằng bất kỳ trường hợp nào thuộc loại này phải hỗ trợ một hoạt động nhất định.
Phần kết luận
Trong một vài trường hợp trong đó một giao thức chỉ có một triển khai có liên quan, hậu tố Giao thức Giao thức có thể có ý nghĩa để lớp và giao thức có thể có cùng tên. Tuy nhiên, điều này chỉ nên giới hạn trong những trường hợp như vậy.
Mặt khác, tên nên là một số danh từ phản ánh những hoạt động của giao thức này. Sử dụng một hình thức và một số động từ có thể là một động từ có thể là một điểm khởi đầu tốt và những cái tên như vậy không có khả năng xung đột với tên lớp.
Tên EquatableProtocol
là không recommendable . Tên Equatable
hoặc Equating
sẽ tốt hơn nhiều, và tôi không mong đợi bất kỳ lớp nào có tên Equatable
. Trong trường hợp này, Protocol
hậu tố là tiếng ồn.