Венгерская нотация (hungarian notation)


Hungarian Notation

Charles Simonyi is credited with first discussing Hungarian Notation. It is a variable naming convention that includes C++ information about the variable in its name (such as data type, whether it is a reference variable or a constant variable, etc). Every company and programmer seems to have their own flavor of Hungarian Notation. The following is just what we thought seemed easy for beginning students to understand.

Prefix Type Example
b boolean bool bStillGoing;
c character char cLetterGrade;
str C++ String string strFirstName;
si short integer short siChairs;
i integer int iCars;
li long integer long liStars;
f floating point float fPercent;
d double-precision floating point double dMiles;
ld long double-precision floating point long double ldLightYears;
sz Old-Style Null Terminated String char szName[NAME_LEN];
if Input File Stream ifstream ifNameFile;
is Input Stream void fct(istream &risIn);
of Output File Stream ofstream ofNameFile;
os Output Stream void fct(ostream &rosIn);
S declaring a struct struct SPoint
<
C declaring a class class CPerson
<
struct name or abbrev declaring an instance of a struct SPoint pointLeft;
SPoint ptLeft; // or abbrev. (be consistent)
class name or abbrev declaring an instance of a class CPerson personFound;
CPerson perFound; // or abbrev. (be consistent)

The following table contains letters that go before the above prefixes.

Какая польза от использования венгерской нотации?

Одна из вещей, с которой я борюсь, это не использование венгерской нотации. Я не хочу перейти к определению переменной, просто чтобы посмотреть, какой это тип. Когда проект становится обширным, приятно иметь возможность просматривать переменную с префиксом ‘bool’ и знать, что он ищет true / false вместо 0/1 . значение.

Я также много работаю в SQL Server. Я добавляю к моим хранимым процедурам ‘sp’, а мои таблицы к ‘tbl’, не говоря уже о всех моих переменных в базе данных соответственно.

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

16 ответов

Из-за своего первоначального намерения (см. Ссылка и Ссылка ) был неправильно понят и использовался (ab), чтобы помочь людям запомнить, какой тип переменной, когда язык, который они используют, не является статически типизированным. В любом статически типизированном языке вам не нужно добавлять балласт префиксов, чтобы сказать вам, какой тип является переменной. Во многих нетипизированных языках сценариев это может помочь, но им часто злоупотребляют до такой степени, что они становятся совершенно громоздкими. К сожалению, вместо того, чтобы вернуться к первоначальному замыслу венгерской нотации, люди просто превратили это в одну из тех «злых» вещей, которых вам следует избегать.

Короче говоря, венгерская нотация была предназначена для префикса переменных с некоторой семантикой. Например, если у вас есть экранные координаты (левый, верхний, правый, нижний), вы должны поставить префикс переменных с абсолютными позициями на экране с « abs » и переменными с позициями относительно окна с « rel ». Таким образом, для любого читателя будет очевидным, когда вы передадите относительную координату в метод, требующий абсолютных позиций.

обновление (в ответ на комментарий delnan)

ИМХО злоупотребляемая версия избегается как чума, потому что

  • это усложняет наименование. Когда (ab) используется венгерская нотация, всегда будут дискуссии о том, насколько конкретными должны быть префиксы. Например: listboxXYZ или MyParticularFlavourListBoxXYZ .
  • делает имена переменных длиннее, не помогая понять, для чего эта переменная.
  • это своего рода побеждает объект упражнения, когда во избежание длинных префиксов они сокращаются до сокращений, и вам нужен словарь, чтобы знать, что означает каждое сокращение. ui — целое число без знака? Интерфейс без ссылок? что-то делать с пользовательскими интерфейсами? И эти вещи могут стать длинными . Я видел префиксы из более чем 15, казалось бы, случайных символов, которые должны передавать точный тип переменной, но на самом деле только мистифицировать.
  • быстро устареет. Когда вы меняете тип переменной, люди всегда (lol) забывают обновить префикс, чтобы отразить это изменение, или намеренно не обновлять его, потому что это будет вызывать изменения кода везде, где используется var .
  • это усложняет разговор о коде, потому что «@g.» сказал: имена переменных с венгерской нотацией, как правило, трудно произносимый алфавитный суп. Это мешает удобочитаемости и обсуждению кода, потому что вы не можете «произнести» ни одно из имен.
  • . еще много чего не могу вспомнить в данный момент. Возможно, потому что я имел удовольствие не иметь дело с оскорбленной венгерской нотацией в течение долгого времени .

Венгерская нотация является анти-шаблоном именования в современных средах программирования и имеет вид Тавтология .

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


Это нарушает принцип СУХОГО. Если вам необходимо добавить в префикс таблиц базы данных аббревиатуру, чтобы напомнить вам, что это таблица, то вы определенно недостаточно семантически называете свои таблицы. То же самое касается любой другой вещи, с которой вы делаете это. Это просто дополнительный набор текста и работа без какой-либо выгоды или выгоды в современной среде разработки.

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

Преимущество не использования венгерской нотации состоит в основном лишь в том, чтобы избежать ее недостатков:

The Hungarian notation is redundant when type-checking is done by the compiler. Compilers for languages providing type-checking ensure the usage of a variable is consistent with its type automatically; checks by eye are redundant and subject to human error.

All modern Integrated development environments display variable types on demand, and automatically flag operations which use incompatible types, making the notation largely obsolete.

Hungarian Notation becomes confusing when it is used to represent several properties, as in a_crszkvc30LastNameCol : a constant reference argument, holding the contents of a database column LastName of type varchar(30) which is part of the table’s primary key.

It may lead to inconsistency when code is modified or ported. If a variable’s type is changed, either the decoration on the name of the variable will be inconsistent with the new type, or the variable’s name must be changed. A particularly well known example is the standard WPARAM type, and the accompanying wParam formal parameter in many Windows system function declarations. The ‘w’ stands for ‘word’, where ‘word’ is the native word size of the platform’s hardware architecture. It was originally a 16 bit type on 16-bit word architectures, but was changed to a 32-bit on 32-bit word architectures, or 64-bit type on 64-bit word architectures in later versions of the operating system while retaining its original name (its true underlying type is UINT_PTR , that is, an unsigned integer large enough to hold a pointer). The semantic impedance, and hence programmer confusion and inconsistency from platform-to-platform, is on the assumption that ‘w’ stands for 16-bit in those different environments.

Most of the time, knowing the use of a variable implies knowing its type. Furthermore, if the usage of a variable is not known, it can’t be deduced from its type.

Hungarian notation strongly reduces the benefits of using feature-rich code editors that support completion on variable names, for the programmer has to input the whole type specifier first.

It makes code less readable, by obfuscating the purpose of the variable with needless type and scoping prefixes.

The additional type information can insufficiently replace more descriptive names. E.g. sDatabase doesn’t tell the reader what it is. databaseName might be a more descriptive name.

When names are sufficiently descriptive, the additional type information can be redundant. E.g. firstName is most likely a string. So naming it sFirstName only adds clutter to the code.

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

Что такое венгерская нотация?

Венгерская нотация — способ присвоения специфических префиксов для имён типов данных, констант и переменных.

Возможно, вам доводилось встречать это словосочетание на программистских форумах либо в каких-либо статьях по программированию, либо просто слышать от знакомых разработчиков или преподавателей дисциплины «программирование». Если вы сами только начинаете программировать, то о венгерской нотации вряд ли слышали — она в наше время не слишком популярна, и на то есть ряд довольно веских причин. Впрочем, давайте, пожалуй, обо всём по порядку.


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

Венгерская нотация, конечно, может существенно различаться в зависимости от команды программистов, в которой она применяется. Наиболее употребителен формат венгерской нотации, употребляемый в Windows API. Его легко можно найти на Википедии. Кстати, происхождение самого термина «венгерская нотация» также тесно связано с крупнейшей софтверной корпорацией. Дело в том, что разработал и внедрил на практике её впервые программист венгерского происхождения — Чарльзу Шимоньи. Он, кстати, стал также известен как пятый по счёту космический турист.

В настоящее время венгерская нотация уже не столь актуальна при написании программного кода, поскольку объектно-ориентированные языки программирования, имеющие, ко всему прочему, строгую типизацию (то есть, не позволяющие вольным образом присваивать, например, булевским переменным строковые значения), как бы и устраняют необходимость в специальном именовании переменных. Впрочем, в языках с динамической типизацией (то есть, в таких, где одна и та же переменная может динамически изменять свой тип, в зависимости от присвоенного ей значения) использование венгерской нотации всё ещё довольно актуально, как, впрочем, и в Си, из которого венгерская нотация и пришла. Тем не менее, в общем и целом, венгерская нотация — это, скорее, пережиток прошлого, нежели насущная необходимость. Потому что, как верно заметил Линус Торвальдс (автор свободной ОС Linux), «компилятор и так знает типы и может проверить их».

Венгерская нотация

Венгерская нотация – это соглашение о наименовании переменных и функций.

Это соглашение широко используется при программировании в среде Windows, так как делает код программы более понятным. Свое название венгерская нотация получила в честь родины ее создателя – Чарльза Симонаи (Charles Simonyi).

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

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

Пример использования соглашения о наименовании:

Первая переменная achFile содержит префикс, который расшифровывается как массив символов (array of characters); префикс переменной lpszName указывает на то, что переменная является указателем типа long на строку формата ASCIIZ (long pointer to string zero).

Помимо предоставления возможности сделать код программы более понятным, венгерская нотация позволяет также избежать ряда ошибок.

Например, присвоение типа: lpszName:= achFile; является допустимым, а следующее присвоение недопустимо: lpszName:= cbCount; так как префикс переменной cbCount указывает на то, что переменная должна содержать байт.

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

Префикс Описание
a Массив (array)
ch Символ (char)
by Байт (byte)
n Целое (short/int)
i Целое (int)
x, y Целое для координат (short/int)
cx, cy Короткое целое для координат (short, count)
b Булевское (bool)
w Слово (word)
l Длинное целое (long)
dw Двойное слово (dword)
fn Функция (function)
p Указатель (pointer)
s Строка (string)
sz Строка, оканчивающаяся байтом 0 (string)

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

Пример: wm_XXX означает, что константа принадлежит к группе оконных сообщений (window message), а префикс константы cs_XXX указывает на ее принадлежность к группе стилей класса окна (class style).


Понимание принципов Венгерской нотации позволяет легко разбираться в смысле параметров функций Windows API и в большом числе программ, распространяемых в исходном виде.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Сдача сессии и защита диплома — страшная бессонница, которая потом кажется страшным сном. 8774 — | 7145 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Где я могу найти шпаргалку для венгерской нотации?

Я работаю над проектом, который использует системы Венгерской нотации унаследованного COM C ++. Потому что сохранение унаследованного кода, конвенция является код в оригинальном стиле, что было написано в — наш новый код не кодируется таким образом. Так что я не заинтересован в изменении этого стандарта или иметь аа обсуждение наших прошлых грехов =)

Есть интернет-чит-лист доступен там для систем Венгерской нотации?

Лучшее , что я могу найти до сих пор является предварительно стек Переполнение обсуждение пост , но это не совсем есть все , что я необходимо в прошлом. Кто — нибудь есть какие — либо другие ссылки?

(Делая это сообщество вики в надежде, что это будет список самого заселения)

Если это для устаревших COM проекта, вы , вероятно , хотите , чтобы следовать спецификациям венгерской нотации от Microsoft , которые задокументированы на MSDN.

Вот один для «Системы венгерского», который в моем опыте был более широко используется (и менее полезно):

Но как повсеместно вслед за этим, я понятия не имею.

Другая форма венгерской нотации является «приложение венгерская», который по- видимому, первоначальное намерение Симони (использование переменного было закодировано , а не типа). См http://en.wikipedia.org/wiki/Hungarian_notation для некоторых деталей.

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

Лучший список , который я смог найти здесь


Остальные покрытия , обычно используемые конвенции , такие , как эта запись

Enty MSDN на венгерской нотации является здесь и несколько коротких статей на эту тему (перекрывая друг друга , возможно) здесь и здесь

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

Вы можете быть в состоянии собрать воедино некое подобие обозначений из этих различных звеньев.

Просто чтобы быть полным (!) , Как о венгерской нотации объектов для Visual Basic от Microsoft поддержки не меньше.

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

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

Хорошие примеры венгерской нотации?

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

Редактировать: Я согласен , что венгерский для типов не является то , что нужно, я надеюсь на более конкретные примеры , где это повышает читаемость и ремонтопригодность, как Джоэл дает в своей статье (как на мой ответ).

Проблема с просьбой о хороших примерах венгерской нотации является то , что каждый будет иметь свое собственное представление о том , что хороший пример выглядит. Мое личное мнение таково , что лучшая венгерская нотация не является не венгерской нотацией . Запись была первоначально означали для обозначения предполагаемого использования переменного , а не его типа , но это , как правило , используется для информации типа, в частности , для контроля формы (например, txtFirstName для текстового поля для чьего — то имени.). Это делает код менее ремонтопригодны, с точки зрения читаемости (например, «prepIn nounTerms prepOf nounReadability») и рефакторинга, когда нужно тип , чтобы изменить (есть «lParams» в Win32 API , которые изменили тип).

Вы, вероятно, следует рассматривать не использовать его вообще. Примеры:

  • strFirstName — это может быть просто ПгвЬЫат , так как это очевидно , что это за тип не то, что важен и должен быть в этом случае очевидно. Если не очевидно, то IDE может помочь вам в этом.
  • txtFirstName — это может измениться в FirstNameTextBox или FirstName_TextBox . Он читает лучше , и вы знаете , что это управление , а не только текст.
  • CAccountC используется для имен классов в MFC , но вы действительно не нужно. Счет является достаточно хорошим. Прописное именем является стандарт конвенции для типов (и они появляются только в определенных местах , чтобы они не запутались со свойствами или методами)
  • ixArray (индекс массива ) — ix это немного неясным. Попробуйте arrayIndex .
  • USState (небезопасная строка для государства ) — выглядит как «государство США». Лучше пойти с государственным _ UnsafeString или что — то. Может быть , даже обернуть его в UnsafeString классе , по крайней мере , сделать его типобезопасным.

Венгерская нотация

  • Венге́рская нота́ция в программировании — соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони (венг. Simonyi Károly), предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт.


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

Применяемая система префиксов зависит от многих факторов:

* языка программирования (чем более «либеральный» синтаксис, тем больше контроля требуется со стороны программиста, а значит, тем более развита система префиксов. К тому же использование в каждом из языков программирования своей терминологии также вносит особенности в выбор префиксов);

* стиля программирования (объектно-ориентированный код может вообще не требовать префиксов, в то время как в «монолитном» для разборчивости они зачастую нужны);

* предметной области (например, префиксы могут применяться для записи единиц измерения);

* доступных средств автоматизации (генератор документации, навигация по коду, предиктивный ввод текста, автоматизированный рефакторинг и т. д.).

Связанные понятия

«Foobar» перенаправляется сюда. См. также статью о медиапроигрывателе foobar2000, о канадском фильме Фубар и об англоязычном акрониме FUBAR.Метасинтаксическая переменная, Метапереме́нные — это слова-заменители, которые применяются в технических текстах для обозначения чего-либо, что может стоять на их месте, метапеременные часто используются в программировании.

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

Язык программирования Си поддерживает множество функций стандартных библиотек для файлового ввода и вывода. Эти функции составляют основу заголовочного файла стандартной библиотеки языка Си .

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

Венгерская нотация

Венге́рская нота́ция в программировании — соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони (венг. Simonyi Károly ), предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт [1] .

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


Применяемая система префиксов зависит от многих факторов:

  • языка программирования (чем более «либеральный» синтаксис, тем больше контроля требуется со стороны программиста, а значит, тем более развита система префиксов. К тому же использование в каждом из языков программирования своей терминологии также вносит особенности в выбор префиксов);
  • стиля программирования (объектно-ориентированный код может вообще не требовать префиксов, в то время как в «монолитном» для разборчивости они зачастую нужны);
  • предметной области (например, префиксы могут применяться для записи единиц измерения);
  • доступных средств автоматизации (генератор документации, навигация по коду, предиктивный ввод текста, автоматизированный рефакторинг и т. д.).

Содержание

Примеры [ править ]

Префиксы, задающие тип [ править ]

Префикс Сокращение от Смысл Пример
s string строка sClientName
sz zero-terminated string строка, ограниченная нулевым символом szClientName
n, i int целочисленная переменная nSize, iSize
l long длинное целое lAmount
b boolean булева переменная bIsEmpty
a array массив aDimensions
t, dt time, datetime время, дата и время tDelivery , dtDelivery
p pointer указатель pBox
lp long pointer двойной (дальний) указатель lpBox
r reference ссылка rBoxes
h handle дескриптор hWindow
m_ member переменная-член m_sAddress
g_ global глобальная переменная g_nSpeed
C class класс CString
T type тип TObject
I interface интерфейс IDispatch
v void отсутствие типа vReserved

Как видно в приведённом примере, префикс может быть и составным. Например, для именования строковой переменной-члена класса использована комбинация префиксов «m_» и «s» ( m_sAddress ).

Префиксы, задающие смысл [ править ]

Венгерская нотация для приложений:

Префикс Сокращение от Смысл Пример
i index Индекс int ix; Array[ix] = 10;
d delta Разница между значениями int a, b; . dba = b — a;
n number Количество size_t nFound = 0;

За и против [ править ]

Среди программистов есть как сторонники, так и противники использования венгерской нотации. Противники утверждают, что она громоздка и лишь ухудшает понимание кода. Сторонники утверждают, что слишком многие неверно понимают основную идею и неправильно пользуются нотацией.

Преимущества [ править ]

  • Если встроенного механизма типизации не хватает, венгерская нотация позволяет записывать подтип[en] переменной — например, int cPrice может означать, что переменная имеет не просто целый тип, а валютный (currency). Именно такое применение префиксов было предложено Симони [2] . Это может пригодиться:
    • В низкоуровневом программировании (когда набор доступных типов настолько узок, что, например, целый тип не отличается от булевого).
    • В языках с динамической типизацией, например PHP, где одна и та же переменная может хранить значения любого типа.
    • В инженерных расчётах (для записи единиц измерения). Это позволяет избавиться от немалого количества ошибок простым подсчётом размерностей.
    • В других местах, где переменные одного и того же типа предназначены для хранения разнородных данных — например, в коде защиты от компьютерных взломщиков префикс может указывать на «безопасные» и «небезопасные» данные (SQL-инъекция, XSS).


  • Венгерская нотация удобна для написания больших программ в неполнофункциональных (по современным меркам) редакторах без автоматизированной навигации по тексту. Скорее всего, именно поэтому она стала стандартным стилем кода в WinAPI.
  • Удобно при именовании объектов, для которых тип очевиден — например, кнопку «OK» можно назвать btnOk .
  • Две переменные разного типа, но объединённые логически, могут иметь имена, отличающиеся лишь префиксом. Например, поле ввода для поиска и кнопка «Поиск» могут именоваться как txtSearch и btnSearch . Такая практика позволяет делать названия переменных короткими и в то же время осмысленными.

Этот стиль выбора имён называется «венгерской» записью по названию родины руководителя отдела программирования Microsoft Чарльза Симони, который его изобрёл. (А не потому, что его использование придаёт программам такой вид, будто они написаны на венгерском языке [3] )

Недостатки [ править ]

  • Некоторые программисты считают, что использование префиксов делает имена переменных менее понятными и, таким образом, ухудшает читаемость кода. [4]
  • Если неизвестно имя переменной без префиксов, подчас трудно восстановить её префиксы.
  • Система автодокументации, если она не понимает системы префиксов, отсортирует алфавитный список по префиксу, что может отрицательно сказаться на качестве документации. Впрочем, имена функций обычно префиксами не снабжают.
  • Запись нескольких префиксов из-за частого использования заглавных букв и знаков подчёркивания может стать «пляской на кнопке ⇧ Shift ».
  • Средства навигации, которые включены в современные редакторы кода, и так позволяют видеть тип любой переменной и быстро переходить к точке, где она определена — то есть, использование префиксов может быть избыточным.
  • При изменении типа потребуется изменять имя переменной (не все редакторы кода могут делать это автоматически). [4]
  • Существуют и другие средства задания типа переменной в её имени: например, слова is, has и т. д. для булевского типа ( IsLoggedIn ), count для счётчика ( RefCount ), множественное число для массива ( UserIds ). В языках, в которых заглавные буквы не эквивалентны строчным, регистр букв также может кодировать что-либо.


Известный противник венгерской нотации — Линус Торвальдс: «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста» [5] .

Где я могу найти шпаргалку для венгерской нотации?

Я работаю над проектом, который использует системы Венгерской нотации унаследованного COM C ++. Потому что сохранение унаследованного кода, конвенция является код в оригинальном стиле, что было написано в — наш новый код не кодируется таким образом. Так что я не заинтересован в изменении этого стандарта или иметь аа обсуждение наших прошлых грехов =)

Есть интернет-чит-лист доступен там для систем Венгерской нотации?

Лучшее , что я могу найти до сих пор является предварительно стек Переполнение обсуждение пост , но это не совсем есть все , что я необходимо в прошлом. Кто — нибудь есть какие — либо другие ссылки?

(Делая это сообщество вики в надежде, что это будет список самого заселения)

Если это для устаревших COM проекта, вы , вероятно , хотите , чтобы следовать спецификациям венгерской нотации от Microsoft , которые задокументированы на MSDN.

Вот один для «Системы венгерского», который в моем опыте был более широко используется (и менее полезно):

Но как повсеместно вслед за этим, я понятия не имею.

Другая форма венгерской нотации является «приложение венгерская», который по- видимому, первоначальное намерение Симони (использование переменного было закодировано , а не типа). См http://en.wikipedia.org/wiki/Hungarian_notation для некоторых деталей.

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

Лучший список , который я смог найти здесь

Остальные покрытия , обычно используемые конвенции , такие , как эта запись

Enty MSDN на венгерской нотации является здесь и несколько коротких статей на эту тему (перекрывая друг друга , возможно) здесь и здесь

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

Вы можете быть в состоянии собрать воедино некое подобие обозначений из этих различных звеньев.


Просто чтобы быть полным (!) , Как о венгерской нотации объектов для Visual Basic от Microsoft поддержки не меньше.

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

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

Венгерская нотация

Венге́рская нота́ция в программировании — соглашение об именовании переменных, констант и прочих идентификаторов в коде программ. Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони (венг. Simonyi Károly ), предложившему её ещё во времена разработки первых версий MS-DOS. Эта система стала внутренним стандартом Майкрософт [1] .

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

Применяемая система префиксов зависит от многих факторов:

  • языка программирования (чем более «либеральный» синтаксис, тем больше контроля требуется со стороны программиста, а значит, тем более развита система префиксов. К тому же использование в каждом из языков программирования своей терминологии также вносит особенности в выбор префиксов);
  • стиля программирования (объектно-ориентированный код может вообще не требовать префиксов, в то время как в «монолитном» для разборчивости они зачастую нужны);
  • предметной области (например, префиксы могут применяться для записи единиц измерения);
  • доступных средств автоматизации (генератор документации, навигация по коду, предиктивный ввод текста, автоматизированный рефакторинг и т. д.).

Префиксы, задающие тип

Префикс Сокращение от Смысл Пример
s string строка sClientName
sz zero-terminated string строка, ограниченная нулевым символом szClientName
n, i int целочисленная переменная nSize, iSize
l long длинное целое lAmount
b boolean булева переменная bIsEmpty
a array массив aDimensions
t, dt time, datetime время, дата и время tDelivery , dtDelivery
p pointer указатель pBox
lp long pointer двойной (дальний) указатель lpBox
r reference ссылка rBoxes
h handle дескриптор hWindow
m_ member переменная-член m_sAddress
g_ global глобальная переменная g_nSpeed
C class класс CString
T type тип TObject
I interface интерфейс IDispatch
v void отсутствие типа vReserved

Как видно в приведённом примере, префикс может быть и составным. Например, для именования строковой переменной-члена класса использована комбинация префиксов «m_» и «s» ( m_sAddress ).

Префиксы, задающие смысл

Префикс Сокращение от Смысл Пример
i index Индекс int ix; Array[ix] = 10;
d delta Разница между значениями int a, b; . dba = b — a;
n number Количество size_t nFound = 0;
a argument Аргумент SomeClass::SomeClass(int aX) : x(aX) <>

Среди программистов есть как сторонники, так и противники использования венгерской нотации. Противники утверждают, что она громоздка и лишь ухудшает понимание кода. Сторонники утверждают, что слишком многие неверно понимают основную идею и неправильно пользуются нотацией.

Преимущества

  • Если встроенного механизма типизации не хватает, венгерская нотация позволяет записывать подтип[en] переменной — например, int cPrice может означать, что переменная имеет не просто целый тип, а валютный (currency). Именно такое применение префиксов было предложено Симони [2] . Это может пригодиться:
    • В низкоуровневом программировании (когда набор доступных типов настолько узок, что, например, целый тип не отличается от булевого).
    • В языках с динамической типизацией, например PHP, где одна и та же переменная может хранить значения любого типа.
    • В инженерных расчётах (для записи единиц измерения). Это позволяет избавиться от немалого количества ошибок простым подсчётом размерностей.
    • В других местах, где переменные одного и того же типа предназначены для хранения разнородных данных — например, в коде защиты от компьютерных взломщиков префикс может указывать на «безопасные» и «небезопасные» данные (SQL-инъекция, XSS).
  • Венгерская нотация удобна для написания больших программ в неполнофункциональных (по современным меркам) редакторах без автоматизированной навигации по тексту. Скорее всего, именно поэтому она стала стандартным стилем кода в WinAPI.
  • Венгерскую нотацию можно рассматривать как стандартную систему сокращений. Например, поле ввода для поиска и кнопка «Поиск» могут именоваться как txtSearch и btnSearch . Такая практика позволяет делать названия переменных короткими и в то же время осмысленными.

Этот стиль выбора имён называется «венгерской» записью по названию родины руководителя отдела программирования Microsoft Чарльза Симони, который его изобрёл. (А не потому, что его использование придаёт программам такой вид, будто они написаны на венгерском языке [3] )

Недостатки

  • Некоторые программисты считают, что использование префиксов делает имена переменных менее понятными и, таким образом, ухудшает читаемость кода. [4]
  • Если неизвестно имя переменной без префиксов, подчас трудно восстановить её префиксы.
  • Система автодокументации, если она не понимает системы префиксов, отсортирует алфавитный список по префиксу, что может отрицательно сказаться на качестве документации. Впрочем, имена функций обычно префиксами не снабжают.
  • Запись нескольких префиксов из-за частого использования заглавных букв и знаков подчёркивания может стать «пляской на кнопке ⇧ Shift ».
  • Средства навигации, которые включены в современные редакторы кода, и так позволяют видеть тип любой переменной и быстро переходить к точке, где она определена — то есть, использование префиксов может быть избыточным.
  • При изменении типа потребуется изменять имя переменной (не все редакторы кода могут делать это автоматически). [4]
  • Существуют и другие средства задания типа переменной в её имени: например, слова is, has и т. д. для булевского типа ( IsLoggedIn ), count для счётчика ( RefCount ), множественное число для массива ( UserIds ). В языках, в которых заглавные буквы не эквивалентны строчным, регистр букв также может кодировать что-либо.

Известный противник венгерской нотации — Линус Торвальдс: «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста» [5] .

Илон Маск рекомендует:  Что такое код sybase_affected_rows
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL