Венгерский в VBA хорошо?

Я не использую венгерские префиксы (str, int) в .Net, но все равно нахожу их полезными в VBA, где сложнее увидеть типы.

Это плохо? Ненужный? Может быть, я что-то упускаю.

Я был бы очень признателен за любую обратную связь. Я задавался вопросом какое-то время.

Спасибо всем.


person KennerL90    schedule 03.04.2010    source источник
comment
Я надеялся получить больше ответов непосредственно об использовании его в VBA. Я вижу ответы по всему StackOverflow от людей с высокими показателями репутации (например, Джо по ссылке ниже), которые используют венгерский язык в своих ответах VBA. Для этого должна быть причина. stackoverflow.com/questions/118863 /когда-использовать-класс-в-vba   -  person KennerL90    schedule 04.04.2010
comment
Я думаю, вы часто это видите, потому что это было частью культуры программистов Windows в 1990-х годах, и именно тогда (конечно, до .NET) VB был очень популярен, и поэтому он естественным образом стал частью культуры VB и таким образом программисты VBA. В VBA нет функции, которая делает системы венгерскими (см. ссылку Эрлза, размещенную ниже: joelonsoftware.com/ article/Wrong.html) больше OK. на этом языке. Это определенно не нужно, и это технически делает его плохим, но в том смысле, что если хороший код получает 10, хороший код с венгерскими системами получает 9,99.   -  person jtolle    schedule 04.04.2010
comment
Я действительно думаю, что VBA подходит для венгерского языка приложений больше, чем для других популярных в настоящее время языков, особенно в сочетании с Excel. Частое использование типа данных «Вариант» плюс неудобство определения классов означает, что размещение семантической информации в именах ваших переменных имеет, соответственно, больше смысла.   -  person jtolle    schedule 04.04.2010


Ответы (4)


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

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

Мне нравится, что это позволяет мне делать имена переменных короче. Я мог бы использовать FileNumber и FileName, или я мог бы использовать lFile и sFile. Я не нахожу ни одного более или менее читаемым, чем другой. Это также помогает мне использовать зарезервированные слова в качестве переменных. Если я хочу использовать Replace в качестве имени переменной, я не могу. Но я могу использовать sReplace или lReplace.

person Dick Kusleika    schedule 04.04.2010
comment
Спасибо за ответ. Что касается ответов, то я никогда не видел, чтобы кто-то использовал венгерский язык в коде .Net, но также я НИКОГДА не видел, чтобы кто-то НЕ использовал венгерский язык в VBA. Поэтому я удивлен, что вы единственный, кто ответил, что вы используете его в VBA. Я ценю все ответы, но я не уверен, что у меня действительно есть более сильное мнение о том, что делать. - person KennerL90; 04.04.2010
comment
Я также никогда не слышал, чтобы программист .net использовал какой-либо префикс. Я собирался выучить С# уже 4 года и до сих пор этого не сделал. Как только я это сделаю (это неизбежно), возможно, я изменю свои привычки и в VBA. Или, может быть, VBA умрет к тому времени, когда я действительно изучу C#. :) - person Dick Kusleika; 06.04.2010

Я бы сказал, что такая венгерская нотация является корнем всех зол почти в каждом языке. Некоторые люди говорят, что это удобно для чрезвычайно динамичных языков. Но нет, я считаю, что добавление префикса type-abbreviation к имени переменной в 99% случаев избыточно и просто приводит к уродливому коду.

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

person Earlz    schedule 03.04.2010
comment
Моя проблема в том, что нет простого способа увидеть тип в VBA. Я просто пропустил это? Или, может быть, я должен использовать лучшие имена? - person KennerL90; 04.04.2010
comment
Ну, конечно, name никогда не будет целым числом, а count никогда не будет строкой. - person Earlz; 04.04.2010
comment
+1 Не могу спорить с вашей точкой зрения, что венгерская нотация приводит к уродливому коду. - person amelvin; 04.04.2010

Я бы посоветовал выбрать что-то более высокого уровня, чем просто типы, чтобы вы могли видеть, какова цель вещей. Таким образом, вместо того, чтобы называть что-то string, назовите это name или address, а вместо int назовите это count или coordinate или...

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

person Donal Fellows    schedule 03.04.2010
comment
Звучит интересно. Не могли бы вы привести мне несколько примеров? :-) - person KennerL90; 04.04.2010
comment
+1, вот что говорит Джоэл здесь joelonsoftware.com/articles/Wrong.html - person Earlz; 04.04.2010
comment
@KennerL90: я совершенно ужасен в VB. В последний раз я писал какой-либо Basic в 1991 году и на совершенно другом диалекте. Но идея состоит в том, что вместо вызова переменной f_dwX (тип двойного слова поля объекта x) вы вместо этого называете ее x_coord; назначение переменной важно и более стабильно, чем ее тип. - person Donal Fellows; 04.04.2010

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

По сути, наличие стандартов — это хорошая идея, но то, что это за стандарты, зависит от компании, в которой вы работаете. Если у вас есть некоторый авторитет, вы можете попытаться навязать стандарты, которые в настоящее время продвигает MS, но если у вас много устаревшего кода, это потребует большого количества дорогостоящего рефакторинга с небольшой материальной выгодой.

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

person amelvin    schedule 03.04.2010
comment
Ага, хуже венгерского проекта только тот, что наполовину венгерский, наполовину нет. Будьте последовательны, несмотря ни на что. - person Earlz; 04.04.2010
comment
Должен согласиться с мнением, что последовательность является ключевым моментом. - person amelvin; 04.04.2010