Подтвердить что ты не робот

Согласование имен объектов Objective 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

У вас есть лучший стиль для вышеуказанных методов?

Спасибо

4b9b3361

Ответ 1

Рекомендации по кодированию для Cocoa - отличный ресурс для ответа на любые вопросы, связанные с именованием. Мой ответ как можно больше основан на этом.

Метод Init

Метод init выглядит хорошо.

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

Метод класса

Метод класса выглядит хорошо.

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

Методы класса также могут использоваться для создания экземпляра объекта. В этом случае API Apple обычно имеет метод, начинающийся с имени класса, такого как UIButton buttonWithType:, который имеет подпись:

+ (id)buttonWithType:(UIButtonType)buttonType

Методы экземпляров

Хороший ресурс для соглашений о кодировании для методов можно найти в разделе Общие правила.

Следующий метод должен опустить "and" s:

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

Не используйте "и", чтобы связывать ключевые слова, являющиеся атрибутами получателя.

- (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes; справа

- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes; неверно

Подпись должна выглядеть следующим образом:

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

Методы делегатов

Наконец, я думаю, что есть несколько улучшений, которые могут быть сделаны по методу делегата:

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

Первое улучшение заключается в добавлении имени класса в метод.

Запустите имя, указав класс отправляемого объекта сообщение:

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

Второе улучшение заключается в использовании "DidChange" вместо "WasChanged".

Используйте "сделал" или "будет" для методов, которые вызываются, чтобы уведомить делегат, что что-то случилось или должно произойти.

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

Третье улучшение сильно отличает параметр отправителя. У меня нет документации для поддержки этого, однако все примеры, приведенные в примерах, описывают это поведение. Обратите внимание на (NSBrowser*)sender и (NSWindow*)window в приведенном выше примере кода, взятом прямо из яблочных документов.

С учетом этого метод делегата должен выглядеть больше:

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

Если отправитель был объектом Person, он выглядел бы так:

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

Слово предостережения состоит в том, что вы не должны всегда использовать "делал" в методах делегатов.

Хотя вы можете использовать "did" или "will" для методов, которые вызывают попросите делегата сделать что-то от имени другого объекта, "должен" является предпочтительным.

- (BOOL)windowShouldClose:(id)sender;

Ответ 2

Я бы сказал, что единственный, о котором я не уверен, - это:

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

Похоже, что "и" в двух последних аргументах либо не нужны, либо должны быть заменены глаголом. Я думаю, что хорошее имя действительно сильно зависит от контекста вызова, и что будет сделано с параметрами, отправленными.

Ответ 3

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

Любой метод, начинающийся с init, понимается каркасом как метод, возвращающий сохраненный объект (различие между initWithObjectsAndKeys и dictionaryWithObjectsAndKeys). Поэтому вы должны использовать это соглашение с учетом этого, особенно при использовании ARC.

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

Используя то же соглашение, этот тип метода возвращает объекты с автореализацией (статические методы или нет)

- (void) method

Я бы сказал, что если есть только одно слово, и это слово является существительным, оно должно быть получателем свойства (например, view, superview...). В противном случае, если это глагол, почему бы и не добавить объект, к которому он относится? Как closeModalViewController

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

Я бы сбросил and.

- (void) statusWasChanged:(id)sender

Еще один способ Apple-y будет statusDidChange: