2011-12-07 18 views
23

Obecnie używam następujące konwencjemetoda Objective C nazewnictwo

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

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

- (void) method 

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

- (void) statusWasChanged:(id)sender 

Czy masz lepszy styl dla powyższych metod?

Dzięki

+1

Dla 'initWithName' upewnij się, że rozumiesz jak ARC będzie traktować ten (tj zwracania zatrzymany Object) – Thilo

+1

Twój konwencja nazewnictwa jest dobre .. –

Odpowiedz

52

Coding Guidelines for Cocoa to świetne źródło odpowiedzi na wszelkie pytania dotyczące nazewnictwa. Moja odpowiedź jest jak najbardziej oparta na tym.

Metoda Init

Metoda init wygląda dobrze.

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

Klasa Metoda

Sposób klasa wygląda dobrze.

Metody klas mogą być również używane do tworzenia instancji obiektu.W tym przypadku Apple API mają zazwyczaj początek metody z nazwą klasy jak buttonWithType: metody UIButton „s, która ma podpis:

+ (id)buttonWithType:(UIButtonType)buttonType 

instancji Formy

dobrym źródłem kodowania konwencje dla metody można znalezione pod General Rules.

Poniższa metoda powinna upuść "and" s:

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

połączyć słowa kluczowe, które są atrybutami odbiornika nie należy używać „i”.

- (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;prawo

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

Podpis powinien wyglądać bardziej jak następuje:

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

Delegate Methods

Wreszcie myślę, istnieje kilka ulepszeń, które mogą być wykonane na tym, co wydaje się być metoda delegat:

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

pierwsze poprawa jest dodanie nazwę klasy do metody.

Zacznij nazwę identyfikując klasę obiektu, który jest wysyłającego komunikat:

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

drugie poprawa jest użycie "DidChange" zamiast "WasChanged".

Use „nie” lub „będzie” dla metod, które są wywoływane powiadomić delegata, że ​​coś się stało lub ma się wydarzyć.

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

trzecie poprawa jest silnie odlewania parametr nadawcy. Nie posiadam dokumentacji na poparcie tego, jednak wszystkie przykłady podane w przykładach wydzielają to zachowanie. Zwróć uwagę na (NSBrowser*)sender i (NSWindow*)window w powyższym przykładzie kodu pobranego bezpośrednio z docs.

Mając to na uwadze, metoda delegat powinien wyglądać bardziej jak:

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

Jeśli nadawca była osobą obiekt to będzie wyglądać:

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

Jedna uwaga to ty nie powinny zawsze używać "did" w metodach delegowanych.Chociaż można użyć „nie” lub „będzie” dla metody, które są powołane do zapytać delegata coś zrobić w imieniu innego obiektu, „powinno” preferowane

jest.

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

+ 1 dla opinii opartej na dokumentacji. :) –

+0

Jak zauważa Rahul, przewodnik Steve'a Stevensona na temat konwencji Cocoa jest kolejnym przydatnym źródłem informacji na temat nazewnictwa: http://cocoadevcentral.com/articles/000082.php –

1

powiedziałbym jedynym Nie jestem pewien co jest:

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

Wydaje się, że „i” w ciągu ostatnich dwóch argumentów jest albo zbędne lub powinny zostać zastąpione przez czasownik. Myślę, że dobra nazwa naprawdę zależy wiele od kontekstu rozmowy, a co zostanie zrobione z parametrów przesłanych w.

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

Każda metoda zaczynając init jest rozumiane przez ramy jako metoda Zwracanie zatrzymanych obiekt (na przykład różnicę między initWithObjectsAndKeys i dictionaryWithObjectsAndKeys). Powinieneś więc użyć tej konwencji, mając na uwadze, szczególnie podczas używania ARC.

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

Stosując tę ​​samą konwencję, tego typu metoda wróci obiektów autoreleased (metody statyczne lub nie)

- (void) method 

Powiedziałbym, że jeśli istnieje tylko jedno słowo, i to słowo jest rzeczownikiem Powinien to być getter nieruchomości (np. view, superview ...). W przeciwnym razie, jeśli jest to czasownik, czemu nie dodać również obiektu, do którego się odnosi? Jak closeModalViewController

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

chciałbym upuść and rzeczywiście.

- (void) statusWasChanged:(id)sender 

Bardziej Apple y sposobem byłoby statusDidChange:

+0

+1 Dobra odpowiedź. Myślałem o tym samym z 'statusWasChanged:' dopóki nie zdałem sobie sprawy z metody delegatów, która jest taka, jak przypuszczam, brakuje w niej nazwy nadawcy. Powinien być bardziej podobny do '- (void) senderNameStatusDidChange: (id) sender'. Jeśli więc nadawcą byłaby Osoba, byłaby to jak "- (void) personStatusDidChange: (Osoba *) osoba". Dokumenty na ten temat zazwyczaj zdecydowanie rzucają również nadawcę. Zobacz [Metody Delegatów] [http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-1001803-BCIDAIJE] – Sam

0

Są dobre konwencje nazewnictwa wyjątkiem dla „i”. Mam tendencję do patrzenia na Google Style Guide ".