Какова привлекательность систем венгерь? [закрыто
https://softwareengineering.stackexchange.com/questions/14789
-
22-10-2019 - |
Вопрос
В Какими рекомендациями по именованию вы следуете?, автор говорит:
Также я предпочитаю кодировать, используя венгерские нотации от Чарльза Симони.
Я прибегаю к нескольким программистам, которые все еще предпочитают использовать венгерский, в основном из венгерского аромата Petzold/Systems. Считать dwLength = strlen(lpszName)
.
я прочел Делать неправильный код выглядеть неправильно, и я понимаю обоснование для приложений венгерских, где информация типа домена включена в имена переменных. Но я не понимаю значения при включении типа компилятора к имени.
Почему программисты по -прежнему сохраняют использование этого стиля обозначения? Это просто инерция? Есть ли какие -либо преимущества, которые перевешивают снижение читаемости? Люди просто учатся игнорировать декораторы при чтении кода, и если да, то как они продолжают добавлять ценность?
РЕДАКТИРОВАТЬ: Многие ответы объясняют историю или почему она больше не актуальна, оба из которых рассматриваются в цитируемой статье.
Я бы очень хотел услышать от кого -нибудь, кто все еще использует его. Почему вы его используете? Это в вашем стандарте? Вы бы использовали его, если бы это не требовалось? Вы бы использовали его на новом проекте? Что вы видите в качестве преимуществ?
Решение
На данный момент я все еще использую венгерский ровно три причины, разумно избегая это для всего остального:
- Чтобы соответствовать существующей базе кода при выполнении обслуживания.
- Для контроля, например. "txtfirstname". Нам часто нужно различать (скажем) «первое» значение и «первое» контроль. Венгерский предоставляет удобный способ сделать это. Конечно, я мог бы ввести «FirstNametextbox», но «txtFirstName» так же просто для понимания и меньше персонажей. Более того, использование венгерского означает, что элементы управления того же типа легко найти и часто сгруппируются по имени в IDE.
- Когда две переменные имеют одинаковое значение, но отличаются по типу. Например, «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 и вуаля.
Сэкономить время.