Алгебраическая нотация
- 1 year ago
- 0
- 0
Венге́рская нота́ция в программировании — соглашение об именовании переменных , констант и прочих идентификаторов в коде программ . Своё название венгерская нотация получила благодаря программисту компании Microsoft венгерского происхождения Чарльзу Симони ( венг. Simonyi Károly ), предложившему её ещё во времена разработки первых версий MS-DOS . Эта система стала внутренним стандартом Майкрософт .
Суть венгерской нотации сводится к тому, что имена идентификаторов предваряются заранее оговорёнными префиксами, состоящими из одного или нескольких символов. При этом, как правило, ни само наличие префиксов, ни их написание не являются требованием языков программирования , и у каждого программиста (или коллектива программистов) они могут быть своими.
Применяемая система префиксов зависит от многих факторов:
Префикс | Сокращение от | Смысл | Пример |
---|---|---|---|
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
).
Венгерская нотация для приложений [ источник не указан 2743 дня ] :
Префикс | Сокращение от | Смысл | Пример |
---|---|---|---|
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) {}
|
I | interface | Интерфейс (в имени типа) |
interface IFactory {}
|
Среди программистов есть как сторонники, так и противники использования венгерской нотации. Противники утверждают, что она громоздка и лишь ухудшает понимание кода. Сторонники утверждают, что слишком многие неверно понимают основную идею и неправильно пользуются нотацией.
int cPrice
может означать, что переменная имеет не просто целый тип, а
валютный
(
currency
). Именно такое применение префиксов было предложено Симони
. Это может пригодиться:
txtSearch
и
btnSearch
; количество людей можно записать как
manCount
или
nMen
. Такая практика позволяет делать названия переменных короткими и в то же время осмысленными.
Point
::
Point
(
int
aX
,
int
aY
)
:
x
(
aX
),
y
(
aY
)
{}
.
Этот стиль выбора имён называется «венгерской» записью по названию родины руководителя отдела программирования Microsoft Чарльза Симони, который его изобрёл. (А не потому, что его использование придаёт программам такой вид, будто они написаны на венгерском языке )
IsLoggedIn
),
count
для счётчика (
RefCount
),
множественное число
для массива (
UserIds
). В языках, в которых заглавные буквы не эквивалентны строчным,
также может кодировать что-либо.
Известный противник венгерской нотации — Линус Торвальдс : «Вписывание типа переменной в её имя (так называемая венгерская нотация) ущербно — компилятор и так знает типы и может проверить их, и это запутывает программиста» .