Я сейчас прохожу learncpp.comВ руководствах по C ++, и я вижу, что их тенденция именования переменных дает им имена переменных int с префиксом «n» (т.е. int nValue) и префиксами «ch» для переменных типа char (то есть char chOperation). Является ли это чем-то обычным явлением в отрасли, которое я должен сформировать сейчас по привычке?
Это то, что является обычным явлением в отрасли?
Эта практика была распространена в некоторых частях Microsoft двадцать или тридцать лет назад из-за неправильного понимания несколько более полезное соглашение используемые другими частями компании (переменные тегов указывают на их цель что на языке со слабой типизацией может помочь избежать разного рода ошибок категории). Ни одно из соглашений не служит какой-либо полезной цели в строго типизированном языке, таком как C ++: система типов может отлавливать такие ошибки автоматически и более надежно.
Он стал широко использоваться другими, еще долго после того, как Microsoft (предположительно) поняла, что это бессмысленно и не рекомендуется использовать, по-видимому в убеждении, что подражание привычкам Microsoft могло бы также подражать их успеху. Это до сих пор иногда замечают люди, которые развивают привычки и никогда не сомневаются в их полезности, а также компании, которые отдают предпочтение руководствам по стилю над программным обеспечением.
Лично я нахожу это полезным в качестве предупреждения о том, что код может содержать худшие ужасы.
Я должен сформироваться как привычка сейчас?
Он только усложняет чтение кода и вводит в заблуждение, если вы забудете обновить теги при изменении типа переменной. Вы должны выработать привычку писать ясный, читаемый код, а не посыпать его таинственными рунами.
Отказ от ответственности: краткие комментарии о Microsoft предназначены для того, чтобы дать исторический контекст, и не предназначены для того, чтобы быть авторитетным отчетом о политических решениях Microsoft; в частности, фраза «[Microsoft] поняла, что [это] было бессмысленно» предназначена для обозначения «[некоторые люди в Microsoft] поняли [обсуждаемую тему, использование избыточных тегов типа в современном C ++ в большинстве случаев] не имеет смысла») комментатор, кажется, прочитал) «[вся Microsoft] осознала, что [все использование тегов переменных] было бессмысленным». Все мнения мои и могут основываться на несовершенных знаниях.
Да, они распространены (особенно в проектах, связанных с Windows)
Но разные проекты могут использовать разные стили кодирования. Поэтому, если вы работаете с существующим проектом, то лучше всего придерживаться стиля, которому он уже следует.
Упомянутый вами стиль именования известен как Венгерский стиль, который обычно используется в проектах, связанных с Windows. В венгерском стиле переменные форматируются в случае верблюда (например, CamelCase) и имеют префикс их области действия и типов:
[scope prefix]_[variable type][actual variable name in camel-cased style]
Например:
m_nMemberInteger
целое число (согласно префиксу n
), кроме того, это переменная-член (в соответствии с префиксом m_
) к некоторой структуре / классу, и вы можете найти полный список префиксов областей и типов, используемых в венгерском стиле, по ссылке выше.
Однако в проектах на основе Linux вы обычно найдете людей, использующих разные стили кодирования (например,
Google C ++ стиль кодирования), который использует только нижний регистр и подчеркивание _
назвать их переменные.
Это похоже на венгерскую нотацию. Такие вещи иногда используются, особенно в определенных областях программирования. Лично я думаю, что код выглядит грязно. В C ++ вы должны больше думать о том, что означает объект, а не о том, каким может быть его базовый тип. А современные редакторы легко позволяют вам искать тип переменных, так что это отчасти устарело. Я могу понять, почему он использовался, когда редакторы не были так полезны ..
Как упоминалось в других комментариях, это известно как «Венгерская нотация» и используется, чтобы сделать тип переменной очевидным. Хотя, возможно, можно спорить о том, стоит ли беспокоиться о маркировке типа, другое распространенное соглашение (особенно в C ++) заключается в использовании префиксов для указания информации об использовании переменной. Это особенно полезно для ссылок и переменных-членов. Например, можно иметь функцию, которая выглядит как
void MyClass::myMethod(const int& iInput, int& oOutput, int &ioInputAndOutput)
{
oOutput = ioInputAndOutput + mMemberData + iInput;
ioInputAndOutput *= 2;
}
Как также упоминалось выше, важна согласованность, которая предотвратит больше ошибок, чем любое конкретное соглашение. На совместных проектах обычно стоит соответствовать существующей конвенции.
Как некоторые уже прокомментировали, это похоже на версию венгерской нотации.
Венгерская нотация предназначена для кодирования типа переменной в имени. Некоторые команды разработчиков применяют эту практику, но мне кажется, что это плохой стиль, потому что:
Если вы меняете тип переменной, вы должны изменить имя, что может привести к очень опасным неявным преобразованиям, если вы этого не сделаете.
Это не поощряет очистить и указать конкретные имена переменных что, следовательно, заставляет сопровождающего декодировать имена переменных в венгерском стиле, а не просто читать имя, назначенное в ясный естественный язык.
Завершение имени переменной в IDE становится практически бесполезным.
Это выглядит некрасиво (для примеров того, что я имею в виду, посмотрите на Win32 API.
Часто возникает двусмысленность, особенно если у вас есть указатели на множество пользовательских типов данных.
Для очень хорошего обсуждения стиля см. Stanford CS106B руководство по именам переменных для более тщательного освещения причин.
Кроме того, обязательно посмотрите на Википедия на венгерской нотации