Что такое венгерская нотация и следует ли ее использовать?

Известная цитата в кругах программистов выглядит следующим образом:

Есть только две сложные вещи в компьютерных науках: инвалидация кеша и именование вещей.

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

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

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

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

Действительно ли это венгерский язык?

Да, венгерская нотация действительно была изобретена венгром! Чарльз Симони был сотрудником Microsoft, когда изобрел термин. Он был программистом в компании, работал над прикладным программным обеспечением.

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

Как это выглядит?

Вместо того, чтобы называть переменную просто age , в венгерской системе обозначений используется префикс, представляющий тип этой переменной. Например, в C программист может объявить такую ​​переменную следующим образом:

  int iAge;  

Обратите внимание, потому что C — это строго типизированный язык, префикс i избыточен в точке объявления. Однако при дальнейшем использовании переменной префикс оказывается полезным:

  printf ("I  am% d years old ", iAge);  

Префикс помогает напомнить нам, что мы используем правильный тип переменной.

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

  $ iAge = 21;  

Вот еще несколько примеров общепринятой венгерской нотации схема:

Префикс Тип Пример
b boolean bLightsEnabled
c символ cLetterGrade
str строка strCategory
i целое число iWheels
f float fMiles
C class CPerson
{имя класса} объект personLeader

Венгерские системы и приложения Венгерские

Венгерская нотация разделена. В одном углу у нас Systems Hungarian, в другом — Apps Hungarian. Разница небольшая, но очень важная.

Системный венгерский — это версия, которую люди часто связывают с венгерской нотацией. Он имеет дело исключительно с типом переменной, как мы показали выше.

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

 //небезопасная строка, например.  имя, введенное пользователем в веб-форму 
$ usName
//Длина вертикальной стороны
$ lVertical
//Количество ссылок на объект
$cRefs

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

Что хорошего в венгерской нотации?

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

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

А что плохого в венгерской нотации?

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

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

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

Следует ли использовать венгерскую нотацию?

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

Но вы, возможно, захотите прислушаться к последнему совету Microsoft, компании, создавшей венгерскую нотацию. С 2008 года их Общие соглашения об именах включают следующее простое примечание:

❌ НЕ используйте венгерскую нотацию.

Оцените статью
oilgasindustry.ru
Добавить комментарий