MFC имеет все имена классов, начинающиеся с C. Например, CFile и CGdiObject. Кто-нибудь видел, как он используется в другом месте? Есть ли официальное руководство по именованию от Microsoft, которое рекомендует этот стиль? Идея возникла с MFC или это был какой-то другой проект?Имена классов, начинающиеся с C
ответ
что-то немного похоже используются в Symbian C++, где конвенция является то, что:
T классы являются "ценностью", к примеру TCHAR, TInt32, TDes
классов R являются ручками для ядра (или другие) ресурсы, например RFile, RSocket
М-классы - это mixins, которые включают в себя интерфейсы (интерпретируемые как mixins без функциональных реализаций). Основное правило состоит в том, что множественное наследование должно включать не более 1 класса, отличного от M.
Классы C - это почти все остальное, и происходят из CBase, в котором есть кое-что, что помогает в управлении ресурсами.
HBufC существует, прежде всего, для создания путаных сообщений на форумах Symbian, а его собственный префикс - только начало. H означает «да?», Или, возможно, «Хау, haw! У вас нет STL!» ;-)
Это близко по духу к венгерской нотации Apps, а не к венгерским обозначениям систем. Префикс сообщает вам что-то о классе, который вы могли бы найти в документации, но который вы не знали бы иначе. Все, что нужно назвать в программировании, - это предоставить такие подсказки и напоминания, иначе вы просто позвоните в свои классы «Class001», «Class002» и т. Д.
Системы Венгерский просто говорит вам тип переменной, с которой ИМО не в восторге, особенно на языке, таком как C++, где типы обычно повторяются или полностью скрываются параметрами шаблона. Его аналогом, когда типы именования являются практикой Java, обозначающей все интерфейсы с I. Опять же, я не очень взволнован этим (и не стандартными библиотеками Java), но если вы собираетесь определить интерфейс для каждого класса , в дополнение к интерфейсам, которые фактически используются для полиморфизма в не-тестовых ситуациях, тогда вам нужно каким-то образом отличить их.
мы используем его на работе, как и многих других соглашения об именах
многим я имел в виду C для классов, р для указателя, m_ для членов, s_ для статических членов, п для целого ... не много документов
Я не могу ответить на все ваши вопросы, но, насколько я знаю, это просто отличить классы MFC от других классов - формы венгерской нотации.
Интересно, что это, по-видимому спорным не только за пределами MS, но inside as well.
да, что они знают - рекомендации .NET (например) отвергают идею префикса классов, но отлично подходят префиксов. Иногда споры существуют без уважительной причины. – gbjbaanb
Это был старый стиль кодирования на C++, и MFC, вероятно, была одной из последних вещей, которые его использовали.
Обычно это было просто соглашение C++ (и, возможно, несколько других языков), и, следовательно, оно начало падать из-за пользы, поскольку языки стали более интероперабельными, через COM и затем .NET.
Вы все еще видите, что это кузен, префикс «I» для интерфейсов, довольно часто. Мне всегда было интересно, что «я» выжил, когда «С» умер, но это, вероятно, связано с тем, что интерфейсы так сильно использовались в COM-совместимости.
Я думаю, что важно четко понимать факт, что класс должен быть интерфейсом, а префикс с 'I' может все еще широко использоваться, поскольку он короче и яснее, а затем суффикс' Base'. –
Вероятно, он не умер, потому что он обращается к меньшинствам (интерфейс, параметры типового типа), а наиболее распространенные (классы) не получают лишних помех. –
Так кто же еще использовал его? Только Microsoft? – User1
Это зло. Не используйте венгерскую нотацию ни для чего, кроме абстрагированных вещей.
Например, btnSubmit
нормально описать кнопку с именем Submit (который будет иметь сопроводительную lblSubmit
для метки рядом с кнопкой)
Но такие вещи, как CMyClass
для класса и uiCount
для целого числа без знака с именем граф не помогают программистам и просто приводят к лишнему расточительному набору текста.
@Earlz: Я не согласен с вашим заявлением о uiCount и дополнительной настройке. Если я прочитал что-то вроде «if (uiXCoord <0)», начинает мигать красный свет, но нет, если я прочитаю «if (xCoord <0)», а xCoord - это unigend int. И ввод некоторых дополнительных символов никогда не станет причиной того, что программное обеспечение не готово вовремя, ввод кода является наименьшей проблемой, которую имеет разработчик программного обеспечения. Знать, что вводить, гораздо важнее. – Habi
@Habi: В таких ситуациях вы можете захотеть прослушать предупреждения компилятора. Кроме того, возможно, используйте более описательные имена переменных - в чем причина, почему общая координата x должна быть без знака? – UncleBens
@Habi: Что происходит, когда тип изменяется для 'uiCount' из' unsigned int' в 'unsigned long',' signed int' или 'double'? Согласно Венгерской нотации, переменную необходимо переименовать, * везде * она используется. Согласно валидации, любая модифицированная функция или метод должны быть проверены. Похоже на начало полного регрессионного тестирования. :-( –
Несколько лет назад соглашение об именах имеет решающее значение для определения класса, типа даже группировки класса. Не забывайте, что тогда не было пространства имен и нет/ограниченного intellisense. C - форма венгерской нотации, но, безусловно, популярная MFC. Borland и Delphi использовали T - как префикс для Type
Другой выбор дизайна MFC, основанный на том, что 20-летняя компилятор MS поддерживал, а не как это было бы сделано на современном C++. –
Помню, компиляторы Borland собирались с библиотеками, где имена классов начинались с 'T'. Вероятно, для «типа» :)
Я всегда считал, что это было из-за T в Turbo Pascal/Turbo C ... кодирования нарциссизма :) – Avio
В то время как MFC и множество программного обеспечения, написанного для Windows, использовали соглашение «C» для классов, вы, как правило, не находите последнее в программном обеспечении, написанном для платформ UNIX. Я думаю, что это была привычка, очень сильно поощряемая Visual C++. Я помню, что Visual C++ 6.0 префикс «C» для любых классов, созданных с помощью мастера классов.
См. Здесь: http://www.jelovic.com/articles/stupid_naming.htm для длинной статьи по этому вопросу.
Очень хорошая статья :) – Avio
Такие соглашения для переменных полезны для таких языков, как Fortran, где вам не нужно объявлять типы переменных перед их использованием. Я, кажется, помню, что переменные, имена которых начинались с «i» или «j», были дефолтными по целым числам, а переменные, имена которых начинались с «r» и других букв, по умолчанию были действительными (float) значениями.
То, что люди используют аналогичные для языков, где вам нужно объявлять переменные, или для определения классов, - это, вероятно, просто религия того, что кто-то неправильно понимает старые условные обозначения кода на таких языках, как Fortran, где это действительно имело значение.
При написании приложений, использующих библиотеки Qt, мы используем соглашение об именах, которое отличает классы, которые прямо или косвенно связаны с QObject от классов, которые этого не делают. Это полезно, потому что вы можете указать из имени класса, поддерживает ли он сигналы/слоты, свойства и все остальные свойства, которые поступают из QObject.
- 1. Имена классов C#, начинающиеся с I
- 2. Java api - Имена классов, начинающиеся с _ [underscore]
- 3. Как назначить имена классов CSS, начинающиеся с цифры
- 4. Имена классов класса CSS, начинающиеся с до определенного символа
- 5. Имена имен, начинающиеся с L
- 6. java System.getenv имена среды, начинающиеся с "="
- 7. Что означают имена переменных, начинающиеся с _?
- 8. Изменить имена столбцов, начинающиеся с буквы «C» с использованием sql?
- 9. имена объектов, начинающиеся с символа подчеркивания
- 10. выберите имена столбцов, начинающиеся с x
- 11. Найти имена атрибутов, начинающиеся с определенного шаблона
- 12. regex найти имена пользователей, начинающиеся с @ php
- 13. XElement Создает имена, начинающиеся с «<at:»
- 14. Имена модулей модуля Python, начинающиеся с цифр
- 15. Имена XSL PI, начинающиеся с XML, зарезервированы
- 16. Objective-c: Динамические имена классов
- 17. Пути C++, начинающиеся с ~
- 18. Строчные имена классов, имена переменных
- 19. Имена полей структуры, начинающиеся со строки
- 20. Neo4j + SDN Почему появляются имена узлов, начинающиеся _
- 21. Как использовать имена классов?
- 22. динамические имена классов с быстрым
- 23. Имена классов конкретных классов и иерархии классов
- 24. C++ Уникальные имена классов и пространства имен
- 25. сериализации: Динамические имена классов
- 26. GWT - имена классов css
- 27. ES6 Динамические имена классов
- 28. Ассоциации и имена классов
- 29. JQuery сравнить имена классов
- 30. XSLT 2.0 Имена элементов тестирования, начинающиеся с определенного значения
Все, что я знаю, это то, что я рад, что они исправили его с помощью соглашений об именах .NET :) –