Я видел аргументы за и против системного венгерского . В течение нескольких лет я работал над устаревшим проектом, который использует эту систему, называя каждую переменную, функцию с префиксом типа переменной, например (strName, intAge, btnSubmit и т. Д.) (Я знаю оригинальные префиксы венгерских приложений по виду переменная, а не тип). Я бы хотел, чтобы мой следующий проект полностью отказался от него, но мне все сложнее назвать однозначно подобные вещи, не прибегая к нему.
Допустим, у меня есть веб-форма для сбора адресов электронной почты и их хранения в таблице базы данных, и кнопка, которая вызывает функцию, которая сохраняет адрес в БД.
Если я использую нотацию в венгерском стиле, я могу назвать поле txtEmail
кнопкой btnEmail
и значением, содержащимся в текстовом поле strEmail
. Затем я мог бы использовать функцию storeEmail(strEmail)
для хранения электронной почты. У меня есть четкое соглашение здесь, очевидно, что каждая переменная.
Какова была бы лучшая практика для именования этих переменных
- не прибегая к венгерским системам,
- не делая их слишком долго или запутанным
- и с четким соглашением использовать во всем моем проекте?
Ответы:
Ваш последний пункт является наиболее важным - что бы вы ни делали, вам нужно быть единообразным во всем проекте и со своими коллегами. Есть два основных способа достижения согласованности, и, если возможно, вы должны использовать оба. Во-первых, используйте инструмент для проверки соглашений об именах во время сборки. В мире .Net StyleCop был бы хорошим примером такого инструмента. Второй способ получить согласованность - это провести экспертную оценку всего кода, чтобы вы все могли следить.
Ваши два других пункта, кажется, спрашивают об альтернативе. Я не уверен, что вам нужна альтернатива; Дело в том, что венгерский язык больше не популярен, потому что он использовался для описания типа, когда система типов и инструменты были немного, скажем так, менее строгими. Т.е., если вы программировали на C и передавали указатели, единственный способ отслеживать тип - это использовать венгерский. Теперь, если вы используете такой язык, как C # или Java, вы не будете использовать указатели (или очень редко), поэтому необходимость в любом виде венгерского языка исчезает. Кроме того, современные интегрированные среды разработки позволяют очень легко увидеть тип, наведя указатель мыши на переменную, или, в худшем случае, с помощью некоторого сокращения, чтобы увидеть исходное объявление. Итак, я не думаю, что вам нужны какие-либо обозначения, просто назовите переменную по тому, что она делает. Если это адрес электронной почты, просто используйте «электронная почта» или «
источник
При работе с веб-формами / формами Windows / другими графическими элементами имеет смысл использовать Systems Hungarian, поскольку у вас могут быть элементы управления, которые очень тесно связаны друг с другом - например, текстовое поле и метка, которые идут вместе; Вы могли бы назвать их
txtEmail
иlblEmail
различать их. По моему опыту, это распространено и действительно полезно.Но в вашем коде позади такого рода наименования нет необходимости. Если у вас есть переменная типа
string
, которая используется для хранения электронной почты, просто назовите ееemail
. Если по какой-то причине вы запутались, большинство IDE должны позволить вам навести курсор на него и увидеть его тип. (В идеале, в вещах OO это может быть атрибут какого-то объекта, иuser.Email
это даже более понятно.)Я думаю, что если в вашем коде объявлено более одного объекта, который не является элементом управления GUI, который может быть назван по праву
email
, что-то не так с вашим дизайном.источник
Что делает переменную "более длинной"?
Вместо того
txtEmail
,btnEmail
вы могли бы использоватьUserEmailText
,UserEmailButton
иAdminEmailText
,AdminEmailButton
Проблема в том, что вы можете начать чувствовать, что переменная начинает становиться длинной:
AdminEmailIsValid
начинает граничить с тем, как долго я позволю переменной быть.Кроме того, вы можете начать замечать, что вы повторно используете набор переменных и набор операций над этими переменными. Это то, для чего предназначен ООП . Вместо набора переменных создайте универсальный объект:
Затем вы можете создать новую переменную как класс и использовать ту же точечную запись для доступа к вашим данным:
Конечно, это нацелено на языки, которые используют парадигму ООП, но большинство популярных языков веб-разработки являются объектно-ориентированными или допускают объектно-ориентированный код (PHP, Python, C #, C ++, Java, JavaScript, ActionScript и т. Д. ).
источник
UserEmailText
иAdminEmailText
особенно). Я обычно использую суффиксы типов, поскольку это позволяет перейти к классуUserEmailText
->UserEmail.text
-> вUser.email.text
зависимости от того, сколько абстракции / функциональности необходимо.