2011-12-07 23 views
23

Tôi hiện đang sử dụng các quy ước sauphương pháp C Mục tiêu đặt tên ước

- (id) initWithName:(NSString *) name; 

+ (NSString *) aliasForName:(NSString *) name 

- (void) method 

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

- (void) statusWasChanged:(id)sender 

Bạn có một phong cách tốt hơn cho các phương pháp trên?

Cảm ơn

+1

Đối với 'initWithName' chắc chắn rằng bạn hiểu làm thế nào ARC sẽ đối xử này (ví dụ: trả về một đối tượng giữ lại) – Thilo

+1

quy ước đặt tên của bạn là tốt .. –

Trả lời

52

Coding Guidelines for Cocoa là tài nguyên tuyệt vời để trả lời bất kỳ câu hỏi quy ước đặt tên nào. Câu trả lời của tôi là càng nhiều càng tốt dựa trên điều này.

Init Method

Phương pháp init có vẻ tốt.

- (id) initWithName:(NSString *) name; 

Lớp Phương pháp

Phương thức lớp có vẻ tốt.

+ (NSString *) aliasForName:(NSString *) name 

Phương pháp lớp cũng có thể được sử dụng để khởi tạo thể hiện của đối tượng.Trong trường hợp này, của Apple API thường có khi bắt đầu phương pháp với tên của lớp như phương pháp buttonWithType:UIButton 's mà có chữ ký:

+ (id)buttonWithType:(UIButtonType)buttonType 

Instance Phương pháp

Tài nguyên tốt cho mã hóa quy ước cho các phương pháp có thể được tìm thấy theo số General Rules.

Phương pháp sau đây cần thả "and" s:

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango // BAD 

Không sử dụng “và” liên kết từ khóa mà là thuộc tính của người nhận.

- (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;đúng

- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;sai

Chữ ký nên trông giống như sau:

- (void) methodWithApple:(NSString*)apple orange:(NSString*)orange 
mango:(NSString*)mango // GOOD 

Delegate Methods

.210

Cuối cùng, tôi nghĩ rằng có một vài cải tiến mà có thể được thực hiện trên những gì dường như là một phương pháp đại biểu:

- (void) statusWasChanged:(id)sender // Not horrible, but not ideal 

cải thiện đầu tiên là để thêm tên lớp để phương pháp này.

Bắt đầu tên bằng cách xác định lớp của đối tượng đó là gửi thông điệp:

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row; 
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename; 

cải thiện Thứ hai là sử dụng "DidChange" thay vì "WasChanged".

Sử dụng "đã làm" hoặc "sẽ" cho các phương thức được gọi để thông báo cho ủy quyền rằng điều gì đó đã xảy ra hoặc sắp xảy ra.

- (void)browserDidScroll:(NSBrowser *)sender; 
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window; 

Cải thiện thứ ba là mạnh mẽ truyền tham số người gửi. Tôi không có tài liệu để hỗ trợ việc này, tuy nhiên tất cả các ví dụ được cung cấp trong các ví dụ đều làm xuất hiện hành vi này. Hãy chú ý đến số (NSBrowser*)sender(NSWindow*)window trong mẫu mã trên được lấy trực tiếp từ tài liệu của apple.

Với điều này trong tâm trí, phương pháp đại biểu sẽ giống như hơn:

- (void) senderClassNameStatusDidChange:(SenderClassName*)sender // Good 

Nếu người gửi được một người phản đối nó sẽ trông giống như:

- (void) personStatusDidChange:(Person*)sender // Good 

Một lời cảnh báo là bạn không nên luôn luôn sử dụng "đã làm" trong các phương thức ủy nhiệm.

Mặc dù bạn có thể sử dụng “đã” hoặc “sẽ” cho các phương pháp được viện dẫn để hỏi các đại biểu để làm một cái gì đó đại diện cho đối tượng khác, “nên” được ưa thích.

- (BOOL)windowShouldClose:(id)sender; 
+3

+ 1 cho ý kiến ​​dựa trên tài liệu. :) –

+0

Như Rahul đã chỉ ra, hướng dẫn của Scott Stevenson về quy ước Cocoa là một tài nguyên hữu ích khác khi nói đến đặt tên: http://cocoadevcentral.com/articles/000082.php –

1

Tôi có thể nói là người duy nhất tôi không chắc chắn về là:

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

Nó có vẻ như "và" trong hai đối số cuối cùng là một trong hai không cần thiết hoặc nên được thay thế bằng một động từ. Tôi nghĩ rằng một tên tốt thực sự phụ thuộc rất nhiều vào bối cảnh của cuộc gọi, và những gì sẽ được thực hiện với các thông số được gửi trong

1
- (id) initWithName:(NSString *) name; 

. Bất kỳ phương pháp bắt đầu với init được hiểu bởi các khuôn khổ như một phương pháp trả lại một giữ lại đối tượng (sự khác biệt giữa initWithObjectsAndKeysdictionaryWithObjectsAndKeys chẳng hạn). Vì vậy, bạn nên sử dụng quy ước này với ý nghĩ đó, đặc biệt là khi sử dụng ARC.

+ (NSString *) aliasForName:(NSString *) name 

Sử dụng quy ước tương tự, loại phương pháp sẽ trở lại đối tượng autoreleased (phương pháp tĩnh hay không)

- (void) method 

tôi sẽ nói rằng nếu chỉ có một từ, và từ này là một danh từ , nó phải là getter của một tài sản (như view, superview ...). Nếu không, nếu đó là động từ, tại sao cũng không thêm đối tượng nó đề cập đến? Giống như closeModalViewController

- (void) methodWithApple:(NSString *) apple andOrange:(NSString *) orange 
andMango:(NSString *) mango 

Tôi sẽ hủy and thực sự.

- (void) statusWasChanged:(id)sender 

Một hơn cách của Apple-y sẽ statusDidChange:

+0

1 Tốt câu trả lời. Tôi đã nghĩ điều tương tự với 'statusWasChanged:' cho đến khi tôi nhận ra phương thức ủy nhiệm, đó là cái mà tôi cho là có, thiếu tên người gửi trong đó. Nó phải giống như '- (void) senderNameStatusDidChange: (id) sender'. Vì vậy, nếu người gửi là một người, nó sẽ giống như '- (void) personStatusDidChange: (Person *) person'. Các tài liệu về điều này thường mạnh mẽ đúc người gửi là tốt. Xem [Phương thức ủy quyền] [http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-1001803-BCIDAIJE] – Sam

0

Đó là những quy ước đặt tên tốt ngoại trừ 'và'. Tôi có xu hướng nhìn vào số Google Style Guide '.

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