Вопрос

В Какими рекомендациями по именованию вы следуете?, автор говорит:

Также я предпочитаю кодировать, используя венгерские нотации от Чарльза Симони.

Я прибегаю к нескольким программистам, которые все еще предпочитают использовать венгерский, в основном из венгерского аромата Petzold/Systems. Считать dwLength = strlen(lpszName).

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

Почему программисты по -прежнему сохраняют использование этого стиля обозначения? Это просто инерция? Есть ли какие -либо преимущества, которые перевешивают снижение читаемости? Люди просто учатся игнорировать декораторы при чтении кода, и если да, то как они продолжают добавлять ценность?

РЕДАКТИРОВАТЬ: Многие ответы объясняют историю или почему она больше не актуальна, оба из которых рассматриваются в цитируемой статье.

Я бы очень хотел услышать от кого -нибудь, кто все еще использует его. Почему вы его используете? Это в вашем стандарте? Вы бы использовали его, если бы это не требовалось? Вы бы использовали его на новом проекте? Что вы видите в качестве преимуществ?

Это было полезно?

Решение

На данный момент я все еще использую венгерский ровно три причины, разумно избегая это для всего остального:

  1. Чтобы соответствовать существующей базе кода при выполнении обслуживания.
  2. Для контроля, например. "txtfirstname". Нам часто нужно различать (скажем) «первое» значение и «первое» контроль. Венгерский предоставляет удобный способ сделать это. Конечно, я мог бы ввести «FirstNametextbox», но «txtFirstName» так же просто для понимания и меньше персонажей. Более того, использование венгерского означает, что элементы управления того же типа легко найти и часто сгруппируются по имени в IDE.
  3. Когда две переменные имеют одинаковое значение, но отличаются по типу. Например, «strvalue» для значения, фактически напечатанного пользователем и «Intvalue» для того же значения, как только оно было проанализировано, как в целом.

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


Обновлять:

Я только что прочитал Проницательная статья Эриком Липпертом, объясняя, как венгерский может помочь сделать неправильный код выглядеть неправильно. Стоит прочитать.

Другие советы

Я не большой поклонник использования венгерских обозначений, но думаю так:

  • Мы также можем заметить, что быстрее находить строку, ссылаясь на текстовое поле в вашем коде: вводив «txt» в вашем поле поиска.

Не представьте себе наоборот, где у каждого элемента есть свое имя. Вам может быть медленнее найти, куда вы хотите пойти, верно?

То же самое относится и к DDL, когда мы хотим обратиться к выпадению, он проще или нет? :)

Люди не будут тратить так много времени, чтобы найти, где этот элемент.

Использование префикса не используется для современных компиляторов языков, таких как C#, но это используется (читаемо) для людей.

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

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

Оба стиля возникли в Microsoft. В наши дни Microsoft Наименование соглашений Категорически скажите «Не используйте венгерские нотации».

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


Я полагаю, я мог бы расширить это. Я использовал SH на своем рабочем месте в течение последнего, о, десять лет или около того (потому что это в нашем стандарте). Это никогда не помогло решить проблему.

С другой стороны, я использовал неорганизованные, но хорошо названные переменные в моем «коде дома» почти одинаково столь же долгого времени. Я никогда не пропустил Ш.

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

Итак, в заключение, единственная разница, которую я вижу, - это износ на вашей клавиатуре.

Я фактически начал использовать SH в новом коде, который я написал в этом месяце.

Мое задание включало переписывание кода Perl в JS, чтобы его можно было перенести на клиентскую сторону нашего веб -приложения. В Perl SH, как правило, не требуется из -за сигил ($ string, @array, %хэш).

В JavaScript я обнаружил, что SH неоценим для отслеживания типов структур данных. Например,

var oRowData = aoTableData[iRow];

Это извлекает объект из массива объектов с использованием целочисленного индекса. Придерживаясь этой конвенции, сэкономило мне довольно много времени в поисках типов данных. Кроме того, вы можете перегружать лаконичные имена переменных (oRow против. iRow).

TL; DR: SH может быть великим, когда у вас есть сложный код на слабо напечатанном языке. Но если ваш IDE может отслеживать типы, предпочитайте это.

Мне также любопытно увидеть обоснование. Мы знаем, почему они использовали его в прошлом: отсутствие поддержки IDE для информации типа. Но сейчас? Проще говоря, я думаю, что это традиция. C ++ Код всегда Похоже, так зачем что -то менять? Кроме того, когда вы строите на вершине предыдущего кода, в котором использовались венгерские обозначения, это было бы довольно странно, когда вы внезапно перестаете использовать это ...

Системные венгерские записи были на самом деле чем-то вроде члена, что недоразумение термина «тип». Разработчики систем восприняли это буквально как тип компилятора (слово, байт, строка, ...), в отличие от типа домена приложений (индекс строки, индекс столбцов, ...).

Но я предполагаю, что каждый разработчик проходит несколько этапов стиля, которые кажутся отличной идеей в то время (а тип префикса кажется хорошей идеей для новичка), прежде чем попасть в ловушки (изменение типа, создание новых, значимых префиксов, так далее). Так что я думаю, что есть инерция: от разработчиков, которые не поправляются и не понимают, почему это плохой выбор, от разработчиков, застрявших со стандартами кодирования, которые требуют практики и от людей, использующих <windows.h>. Анкет Для Microsoft было бы слишком дорого измениться, чтобы избавиться от нотации префикса (что неверно во многих местах: WPARAM?).

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

Скажем, у вас есть переменная, и имя - intheithofmonster.

Скажите, что вы забываете имя переменной

Это может быть высота монстра или монстергейта или измерения

Вы хотите иметь возможность ввести букву и получить автозаполнение вам некоторых имен переменных.

Зная, что высота монстра - это int, вы просто вводите I и вуаля.

Сэкономить время.

Лицензировано под: CC-BY-SA с атрибуция
scroll top