У моего соглашения о присвоении имен есть имя? - PullRequest
9 голосов
/ 17 июля 2009

Итак, я следую этой схеме именования Delphi: аргументы начинаются с A, классовые переменные начинаются с F, а локальные переменные начинаются с M. Есть ли у этой схемы имя? Я часто вижу это в источнике Delphi, я хотел бы прочитать об этом больше, но я не уверен, как это называется.

Ответы [ 5 ]

18 голосов
/ 17 июля 2009

Этот стиль кодирования специально назван в Object Pascal Style Guide , поскольку не является венгерской нотацией (за одним исключением, перечисляемые типы .)

Конкретные соглашения о кодировании, о которых вы говорите, не имеют названия как такового, насколько я знаю, просто вы пишете код, соответствующий руководству по стилю кодирования CodeGear (старый Borland). Руководство, похоже, не дает стилю имя.

Причина, по которой вы часто это видите в исходном тексте Delphi, заключается в том, что это руководство основано на стиле кодирования, разработанном командой Delphi!

Этот документ стоит прочитать - не только для рекомендаций по коду, но и из-за интереса к другим вещам, которые он упоминает.

10 голосов
/ 17 июля 2009

Ваша схема может рассматриваться как некоторая форма Венгерских обозначений (HN). Обычно HN используется для обозначения типа переменной, но, как отмечает Википедия,

Запись иногда расширяется в C ++ для включения scope из переменная, разделенная подчеркиванием. Это расширение часто также используется без венгерского спецификация типа: [..]

10 голосов
/ 17 июля 2009

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

На самом деле существует два типа венгерской нотации:

  • Apps Hungarian - идея состояла в том, чтобы украсить имена идентификаторов на основе семантической информации о том, что они хранят, поэтому в основном переменная target :
    rwElement - variable represents a row ("rw")
    colElement - variable represents a columns ("col")
  • Systems Hungarian - префикс кодирует фактический тип данных переменной.
    szName - variable is a zero-terminated string ("sz")
    lAccount - variable is a long integer ("l")

Так что, хотя ваше соглашение об именах в некотором роде представляет какую-то цель, на самом деле это не та цель, на которую ссылается Apps Hungarian.

7 голосов
/ 17 июля 2009

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

Я никогда не видел ваш конкретный выбор префиксов раньше. Наиболее близким, что я видел, является то, что я считаю Индийским соглашением , которое использует A для аргументов, F для полей, G для глобальных, L для локальных и, конечно, обычный I для интерфейсов и T для записей и классов. Свойства и подпрограммы не имеют префикса.

7 голосов
/ 17 июля 2009

В общем, это звучит как венгерская нотация, но это не определяет соглашение A, F или M, в частности, только добавление информации о типе в имя.

...