stringtranslate.com

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

Венгерская нотация — это соглашение об именовании идентификаторов в компьютерном программировании , в котором имя переменной или функции указывает на ее намерение или вид, или в некоторых диалектах на ее тип . Первоначальная венгерская нотация использует только намерение или вид в своем соглашении об именовании и иногда называется Apps Hungary , поскольку она стала популярной в подразделении Microsoft Apps при разработке приложений Microsoft Office . Когда подразделение Microsoft Windows приняло соглашение об именовании, оно основывалось на фактическом типе данных, и это соглашение получило широкое распространение через Windows API ; иногда это называется системной венгерской нотацией.

Симони : ...BCPL [имел] единственный тип, который представлял собой 16-битное слово... не то чтобы это имело значение.

Буч : Если только вы не продолжите венгерскую нотацию.

Симони : Совершенно верно... позже мы перешли и к типизированным языкам... Но... мы бы посмотрели на одно имя, и я бы вам рассказал о нем очень много... [1]

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

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

История

Оригинальная венгерская нотация была изобретена Чарльзом Симони , программистом, работавшим в Xerox PARC примерно в 1972–1981 годах, и позже ставшим главным архитектором в Microsoft . Название нотации является ссылкой на страну происхождения Симони, а также, по словам Энди Херцфельда , потому что она делала программы «выглядящими так, как будто они были написаны на каком-то непостижимом иностранном языке». [2] Имена венгерских людей «перевернуты» по сравнению с большинством других европейских имен; фамилия предшествует имени . Например, англизированное имя «Charles Simonyi» на венгерском языке изначально было «Simonyi Károly». Точно так же имя типа предшествует «имени» в венгерской нотации. Похожий стиль именования Smalltalk «type last» (например, aPoint и lastPoint) был распространен в Xerox PARC во время пребывания там Симони. [ необходима цитата ]

В статье Симони о нотации упоминаются префиксы, используемые для указания «типа» хранимой информации. [3] [4] Его предложение было в значительной степени связано с декорированием имен идентификаторов на основе семантической информации о том, что они хранят (другими словами, назначение переменной ). Нотация Симони стала называться Apps hung, поскольку это соглашение использовалось в отделе приложений Microsoft. Systems hung была разработана позже в команде разработчиков Microsoft Windows . Apps hung не полностью отличается от того, что стало известно как Systems hung, поскольку некоторые из предложенных Симони префиксов содержат мало или вообще не содержат семантической информации (см. примеры ниже). [4]

Системы венгерские против приложений венгерские

Различие в нотации Systems и нотации Apps заключается в назначении префиксов.

В нотации Systems Hungary префикс кодирует фактический тип данных переменной. Например:

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

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

Ниже приведены примеры из оригинальной статьи: [3]

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

Код, использующий венгерскую нотацию Apps, иногда может содержать венгерскую нотацию Systems при описании переменных, которые определены исключительно в терминах их типа.

Отношение к сигилам

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

Примеры

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

Хотя венгерская нотация может применяться к любому языку программирования и среде, она была широко принята корпорацией Microsoft для использования с языком C, в частности, для Microsoft Windows , и ее использование в значительной степени ограничено этой областью. В частности, использование венгерской нотации было широко пропагандировано в книге Чарльза Петцольда " Программирование Windows" , оригинальной (и для многих читателей окончательной) книге по программированию Windows API . Таким образом, многие часто встречающиеся конструкции венгерской нотации специфичны для Windows:

В C++ эта нотация иногда расширяется, чтобы включить область действия переменной, опционально разделенную подчеркиванием. [5] [6] Это расширение часто также используется без венгерской спецификации типа:

В коде JavaScript, использующем jQuery , $префикс часто используется для указания того, что переменная содержит объект jQuery (а не простой объект DOM или какое-либо другое значение). [7]

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

(Некоторые из них применимы только к системам венгерского языка.)

Сторонники утверждают, что преимущества венгерской нотации включают в себя: [3]

Недостатки

Большинство аргументов против венгерской нотации направлены против нотации Systems hungary, а не Apps hungary [ требуется ссылка ] . Вот некоторые потенциальные проблемы:

Известные мнения

Смотрите также

Ссылки

  1. ^ "Устная история Чарльза Симони" (PDF) . Archive.computerhistory.org\accessdate=5 августа 2018 г. Архивировано (PDF) из оригинала 2015-09-10.
  2. ^ Розенберг, Скотт (1 января 2007 г.). «Все, что вы можете сделать, я могу сделать мета». MIT Technology Review . Получено 21 июля 2022 г.
  3. ^ abc Чарльз Симони (ноябрь 1999). "Венгерская нотация". Библиотека MSDN . Microsoft Corp.
  4. ^ abc Spolsky, Joel (2005-05-11). "Заставить неправильный код выглядеть неправильным". Joel on Software . Получено 2005-12-13 .
  5. ^ "Mozilla Coding Style". Developer.mozilla.org . Архивировано из оригинала 2 декабря 2019 . Получено 17 марта 2015 .
  6. ^ "Руководство по стилю кодирования Webkit". Webkit.org . Получено 17 марта 2015 г. .
  7. ^ "Почему переменная JavaScript начинается со знака доллара?". Stack Overflow . Получено 12 февраля 2016 г.
  8. ^ Джонс, Дерек М. (2009). Новый стандарт C: Культурный и экономический комментарий (PDF) . Addison-Wesley. стр. 727. ISBN 978-0-201-70917-9. Архивировано (PDF) из оригинала 2011-05-01.
  9. ^ «Создайте приложение для любой задачи — FileMaker — дочерняя компания Apple». Filemaker.com . Получено 5 августа 2018 г. .
  10. ^ Мартин, Роберт Сесил (2008). Чистый код: Справочник по гибкому программному мастерству . Редмонд, Вашингтон: Prentice Hall PTR. ISBN 978-0-13-235088-4.
  11. ^ "Linux kernel coding style". Документация ядра Linux . Получено 9 марта 2018 г.
  12. ^ Макконнелл, Стив (2004). Code Complete (2-е изд.). Редмонд, Вашингтон: Microsoft Press . ISBN 0-7356-1967-0.
  13. ^ Страуструп, Бьярн (2007). «Часто задаваемые вопросы по стилю и технике C++ Бьярна Страуструпа» . Проверено 15 февраля 2015 г.
  14. ^ "Руководство по проектированию для разработки библиотек классов: общие соглашения об именовании" . Получено 2008-01-03 .

Внешние ссылки