Хорошая OO схема именования для c - PullRequest
4 голосов
/ 09 марта 2011

Я обнаружил, что у меня много функций, которые в стиле c oo (ничего, кроме причудливых макросов или указателей на функции, просто функции struct +, которые принимают этот тип структуры в качестве первого аргумента. Является ли my_func_my_type хорошей схемой для таких вещей? Если яиспользовать это, я должен пытаться быть последовательным - что, если имя одной из моих функций становится> 20 символов?> 25? Должен ли я сохранять согласованность стиля даже тогда?

Также, какова хорошая схема именования для конструкторов /инициализаторы / деструкторы? Есть ли что-то лучше, чем new_my_type, init_my_type, free_my_type?

PS. Есть ли хорошее имя для этого / self ptr, или я должен просто назвать первый параметр функции типа OO, как в обычнойфункция (to_init, some_guy, ect.)

Ответы [ 3 ]

3 голосов
/ 09 марта 2011

Я бы лично использовал схему, совместимую с большинством библиотек Си, в которой в качестве префикса функции указано имя библиотеки.Что даст, например, void MyObject_MyFunction.Для строительства / разрушения вы можете оставаться последовательными и использовать MyObject_Construct, MyObject_Destroy.Я бы сказал, что имя не имеет большого значения, если вы остаетесь последовательным.

1 голос
/ 09 марта 2011

В отсутствие C в мире C, C ++ предоставляет полезный прецедент в именовании своих функций:

[[namespace::...]struct::]function

Нет ничего похожего на пространства имен в C, но вы можете просто думать и моделировать их какпрефиксы, общие для связанных структур.Для удобства чтения полезно иметь что-то, чтобы визуально отделить отдельные компоненты именования.Если вам нравится использовать подчеркивания в своих функциях, вы можете рассмотреть два подчеркивания в качестве разделителя, в противном случае, возможно, одно.(Технически, два подчеркивания могут быть зарезервированы для реализации, но я никогда не видел ни одного идентификатора реализации, в котором бы не было префикса с подчеркиванием, внутри ставилось двойное подчеркивание).

Хранение имен, близких к C ++, также помогает программистамохватывают оба языка, и при необходимости переносят код вперед и назад.Точно так же терминология C ++ может быть принята: конструктор , деструктор , возможно new и delete (хотя эти имена могут стать неправильными, если Cкод перенесен на C ++, но продолжает использовать free / malloc).

ИМХО, последовательное и четкое именование экономит больше хлопот, чем вызывают длинные идентификаторы, но если что-то становится проблемой, тогда ищите локализованный обходной путь, такой как макрос,встроенная функция-обертка, указатель на функцию и т. д.

1 голос
/ 09 марта 2011

'good' немного субъективно, но я считаю, что проще всего поддерживать определенную схему (включающую имя структуры в метод) и строго следовать ей. Действительно длинные имена функций, которых я стараюсь избегать, хотя, если функция настолько сложна, что ей нужно такое длинное имя, возможно, пришло время реорганизовать ее, разделить на подфункции и т. Д. Я также не использую подчеркивание, но это вопрос вкуса. Пример того, что здесь используется:

typedef struct Discriminator
{
  //members
} Discriminator;

DiscriminatorConstruct( Discriminator* p );
DiscriminatorDestruct( Discriminator* p );
DiscriminatorFunctionA( Discriminator* p, int arg1, int arg2 );
...