Лекция: Венгерская запись

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

Для этого может использоваться специальная запись имен переменных. Впервые такая запись имен была предложена Чарль­зом Симони (Charles Simonyi) и обоснована в его докторской дис­сертации. Возможно, потому что Симони родился в Будапеште и образованные по его системе наименования причудливы (на пер­вый взгляд), как венгерский язык, за его методикой записи за­крепилось название «венгерская запись». В настоящее время Си­мони является ведущим инженером Microsoft, а венгерская за­пись стала общепризнанной при программировании под Windows.

Идея венгерской записи заключается в прибавлении к идентификаторам коротких префиксов, определяющих тип и некоторые другие важные характеристики переменной. Префиксы принято записывать строчными буквами, а имя переменной с заглавной буквы. Поскольку венгерская запись «работает» для любых типи­зированных языков, имеет смысл применить ее и при программи­ровании ПЛК.

Для базовых типов МЭК можно предложить следующие пре­фиксы типов.

Префикс Тип
b BOOL
by BYTE, USINT
si SINT
w WORD, UINT
i INT
dw DWORD, UDINT
di DINT
r REAL
Ir LREAL
st STRING
t TIME
td TIME_OF_DAY
d DATE
dt DATE_AND_TIME

 

Примеры обозначений:

bStop: BOOL;

 

bySet: BYTE;

wSize UINT;

«Венгерские» имена сами говорят о корректности их примене­ния. Очевидно, следующее выражение является бессмысленным; bStop := wSize * 2; а выражение bStop := wSize > 2; вполне допус­тимым.

Уточнить назначение переменной можно добавлением еще од­ного символа перед префиксом типа:

Префикс Назначение переменной
а Составной тип, массив
п Индекс
с Счетчик

Для временных переменных можно вообще не утруждать се­бя придумыванием имен, а использовать только префиксы. На­пример:

aiSample: ARRAY[1..32] OF INT;
ci: INT;

FOR ci := 1 TO 32 DO

(*без комментариев*)

siSample[ci] := -1; END_FOR

К сожалению, некоторые из предложенных префиксов совпа­дают с зарезервированными словами (BY, AT, D, DT, N, ST). При использовании их в качестве временных переменных вы можете добавить порядковый номер или букву алфавита. Например:

ЬуА, ЬуВ, byl, Ьу2: 'BYTE;

Структуры и функциональные блоки образуют имена экземп­ляров с включением полного или сокращенного наименования типа. Например, tpUpDelay: TP;

Символ подчеркивания удобно использовать для индикаций способа обращения к переменной. Подчеркивание в начале имени указывает — только чтение. Идентификаторы переменных, соответствующих входами ПЛК, начинаются символом подчеркива­ния. Подчеркивание в конце имени указывает — только запись. Идентификаторы выходов заканчиваются символом подчеркива­ния. Например, Jylnpl, byOut2_.

Если система обозначений хорошо продумана, то ее примене­ние не вызывает сложности. Единый подход к наименованию очень здорово облегчает чтение программы и позволяет отказать­ся от излишних комментариев. Уникальные префиксы удобны не только для базовых типов, но и для широко используемых в про­екте собственных типов данных и функциональных блоков. Стан­дарт МЭК не содержит рекомендаций по составлению имен пере­менных и компонентов программы. Никакого стандартного набо­ра префиксов венгерской записи также нет. Вы можете использо­вать вышеописанную систему или разработать свою собственную. Главное, чтобы принятая система была понятна всем программи­стам — участникам проекта.

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

 

еще рефераты
Еще работы по информатике