Что бы вы назвали «вспомогательным методом»? - PullRequest
3 голосов
/ 14 мая 2009

Мне интересно, какие методы являются "вспомогательными методами". Где мы должны нарисовать границу, чтобы сказать, что определенный метод является «вспомогательным методом»? На самом деле, я считаю любой метод «вспомогательным», если это не метод инициализации, а метод, реализованный для соответствия протоколу или методам ответа делегирования. Любой другой метод, который я реализую для выполнения чего-либо, в моем понимании является «вспомогательным методом», но я чувствую, что есть еще категории, о которых нужно подумать.

Почему я хочу это знать? Потому что я хочу больше использовать #pragma mark HEADLINE в Xcode. Я полагаю, что хорошо организовать код каким-либо образом.

Пожалуйста, помогите мне прояснить мою картину "вспомогательного метода". Примеры приветствуются!

Ответы [ 7 ]

3 голосов
/ 14 мая 2009

Я смотрю на это как на Методы, которые не требуются для правильного функционирования библиотеки, но делают вещи проще или более читабельными для конечного пользователя.

Хммм ... не привел пример. Допустим, у вас есть функция для получения пользователей из базы данных, и она имеет вид

User GetUsers(UserRole)
{
//Do Something
}

И пример вспомогательного метода может быть

User GetAdmins()
{
   return GetUsers("Admins");
}

Это пример грубого типа псевдокода, но он дает вам суть. Функциональность GetAdmins завершена в GetUsers (), но вспомогательная функция GetAdmins помогает удобочитаемости (и ничего более).

Имеет смысл?

1 голос
/ 14 мая 2009

В Objective-C, я думаю, вы можете назвать любой приватный метод «вспомогательным методом», где под приватным я подразумеваю, что сигнатура метода не появляется в файле .h. То есть это методы, которые вы, скорее всего, объявите в продолжении класса в файле .m:

@interface MyClass ()
- (void)somePrivateMethod;
@end

Что некоторые другие ответы называют вспомогательными методами - необязательными, но общедоступными методами, которые не имеют решающего значения для API - я бы скорее назвал «удобными методами».

1 голос
/ 14 мая 2009

Я бы включил что-то, что обеспечивает некоторую общую полезность, а не прокладку вокруг более сложной функции или что-то, связанное со спецификой реализации. Например, вспомогательный метод для меня будет чем-то вроде метода в NSString, который возвращает NSDate напрямую, вместо того, чтобы требовать повсеместного использования NSDateFormatters.

В этом отношении я бы классифицировал вспомогательные методы как что-то, что поможет вам высушить ваш код, обернув некоторые часто используемые последовательности в одну функцию, или что-то, что вы пишете, чтобы обернуть часть неуклюжего кода из другой API (да, обычно это одно и то же).

Имея риск выглядеть так, будто я пытаюсь создать свой собственный код, я укажу вам на каталог Extensions моего репозитория инструментария , который содержит целую кучу вещей, которые я написал как «вспомогательные методы» на стандартных классах Objective-C. Пример: +(NSError *)errorWithCFStreamError:(CFStreamError)streamError, который является «вспомогательным методом» для преобразования значения CFStreamError старого стиля в правильный объект NSError / CFErrorRef с использованием новых значений, экспортированных в OS X 10.5 (и iPhone).

1 голос
/ 14 мая 2009

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

Примеры:

  • +[NSObject new] - вспомогательный метод для [[NSObject alloc] init];
  • NSClassFromString(str) - вспомогательный метод для objc_getClass([str UTF8String]);
  • +[NSURL URLWithString:str] - вспомогательный метод для [[[NSURL alloc] initWithString:str] autorelease];
  • -[NSURLRequest initWithRequest:request delegate:delegate] - вспомогательный метод для [request initWithRequest:request delegate:delegate startImmediately:NO]
  • -[NSString substringFromIndex:] - вспомогательный метод для -[NSString substringWithRange:]
1 голос
/ 14 мая 2009

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

1 голос
/ 14 мая 2009

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

1 голос
/ 14 мая 2009

Я бы сказал, что метод, специфичный для определенного класса, но не основанный на доступе к частным деталям реализации этого класса, является вспомогательным методом для этого класса. Вспомогательные методы также не должны быть с состоянием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...