Итак, вот две функции, которые делают почти одно и то же.
Как бы вы назвали каждый из них, если бы вы включили оба в свой проект?
void strToLower1(char* str) { int len = strlen(str); int i; for (i=0; i<len; i++) str[i] = tolower(str[i]); } char* strToLower2(const char* inputStr) { char* str = strdup(inputStr); strToLower1(str); return str; // must be freed }
EDIT: я изменил приведенный выше пример для правильности кода (sheesh)
Мне очень нравятся стандарты кодирования Taligent , особенно соглашения об именах . Соглашение об использовании специальных имен для копирования, создания и принятия подпрограмм может применяться здесь:
http://pcroot.cern.ch/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/books/WM/WM_67.html#0
Используйте специальные имена для копирования, создания и принятия подпрограмм
Подпрограммы, которые распределяют, управляют или берут на себя ответственность за хранение, имеют специальные имена и соблюдают следующие рекомендации:
Процедуры, которые создают новый объект, который должен удалить вызывающий, начинаются с Create …
Процедуры, которые копируют существующий объект, где вызывающий должен удалить копию, начинаются с Копировать … Функция-член, которая копирует объект, должна быть Копировать ().
Процедуры, которые оставляют объект и передают делегирование ответственности вызывающему, начинаются с сироты …
Процедуры, которые принимают объект, который вызывающий абонент выделил и несут ответственность за его окончательное удаление, начинаются с Adopt … (Этот стиль программирования подвержен ошибкам, избегайте его, если это возможно).
Принятие подпрограмм, которые не могут следовать предыдущему правилу (например, конструкторы), начинаются с имени аргумента с помощью …
[Содержание] [Предыдущая] [Следующая] Нажмите значок, чтобы отправить вопросы или исправления по этому материалу персоналу Taligent. Copyright © 1995 Taligent, Inc. Все права защищены.
После этого первый метод можно назвать createLowerCaseStr()
или copyAsLowercaseStr()
. Ведущее ключевое слово create
and copy
указывает новую память, которая должна управляться вызывающим.
Лично я бы назвал mutateIntoLowercase()
функцию transformIntoLowercase()
или mutateIntoLowercase()
, но я склонен к длинным именам. Пока не указано Taligent, я вижу, что ключевые ключевые слова transform
и mutate
как намеки на трансформацию, выполненную на месте.
Если strToLowerInPlace
вернул ‘str’, вы могли бы просто написать new_s = strToLowerInPlace(strdup(s))
. Таким образом, я бы сбросил «InPlace» и предположил, что все было на месте, и вызывающий может дублировать по мере необходимости.
(И если у вас будет две функции, по крайней мере сделайте копирование одним вызовом на месте!)
1st: char *copylo(char *dst, const char *src);
(нет ассигнований!)
2nd: char *lowerize(char *data);
tolower()
не нужно делать безумное тестирование и жестко закодированное преобразование