Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.92
bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
#1

Венгерская нотация, оно вообще надо? - C++

22.01.2013, 16:54. Просмотров 3340. Ответов 24
Метки нет (Все метки)

Вопрос в заголовке. Больше всего смущает префикс m_ для приватных членов класса, ни информативности на красоты, а печатать дольше. Общее мнение рудимент или хороший стиль?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 16:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Венгерская нотация, оно вообще надо? (C++):

надо помочь лабами........что-то вообще никак... - C++
Тема: «Решение задач обработки строк и символов» №1 В строке заменить все точки «.» на запятые «,», а двоеточия «:» на точку с...

прогп работает ,но надо чтлб оно выходило с помощию функций - C++ Builder
посмотирите пожалуйста прогп работает ,но надо чтлб оно выходило с помощию функций.Заранее благодарен!!! ...

Венгерская нотация. А что вы думаете? - C++
Уже который день задумываюсь о надобности использования префиксов. С одной стороны - очень полезно, с другой стороны при определенных...

Нотация указателей - C++
Преподователь попросил применить нотацию указателей вместо нотации массивов, помогите пожалуйста. Вот мой код #include <iostream> ...

Нотация O большое - C++
Здорова! Есть задачка: "Изучите О() нотацию. Приведите реалистичный пример, в котором получается, что О(N*N) быстрее, чем О(N) для...

Польская инверсная нотация - C++
помогите пожалуста зделать !!! уже ниделю сижу никак не могу зделать ((

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
01.02.2013, 02:37 #16
Цитата Сообщение от silent_1991 Посмотреть сообщение
просто не понятно, как она может дезинформировать.
если кастануть переменную к другому типу.
Я для приватных полей пишу _ после объявления переменной.
Dmitriy_M
1342 / 1223 / 112
Регистрация: 20.03.2009
Сообщений: 4,408
Записей в блоге: 11
01.02.2013, 07:28 #17
Цитата Сообщение от MrGluck Посмотреть сообщение
если кастануть переменную к другому типу.
Пример пожалуйста.

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
Я для приватных полей пишу _ после объявления переменной.
Чем это лучше m_?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.02.2013, 10:16 #18
Цитата Сообщение от MrGluck Посмотреть сообщение
если кастануть переменную к другому типу.
При касте тип не изменится ведь. Переменная как была инт, так и останется. Это результат станет нового типа, но какое это отношение имеет к исходной переменной?
hinst
22 / 8 / 1
Регистрация: 06.01.2013
Сообщений: 113
01.02.2013, 18:16 #19
я думаю что знак_подчёркивания плохо подходит с точки зрения автодополнения потому, что в C++ глобальное пространство имён засорено разнообразными идентификаторами на _, которые при использовании автодополнения, скорее всего, повалятся, всякие там макросы. Тут логичнее ко всем полям класса обращаться через this-> тогда и автодополнение покажет только члены класса, и в местах обращения к членам класса сразу будет видно что идёт обращение к членам класса. Так же я лично часто вообще стараюсь избегать обращения к полям класса не через get..., set..., или через Свойство в языках где есть поддержка свойств
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Ерунда. Обычно в хороших IDE есть такая штука как refactoring, в котором можно сделать rename, и nX превращается в x.
так всё и есть, только я про смену типа, а не про смену имени переменной.
Цитата Сообщение от silent_1991 Посмотреть сообщение
При касте тип не изменится ведь. Переменная как была инт, так и останется. Это результат станет нового типа, но какое это отношение имеет к исходной переменной?
вот и я думаю, что никакого отношения не имеет, это тут ни при чём.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
01.02.2013, 19:35 #20
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Чем это лучше m_?
тем, что не является буквой и не коверкает запись, ассоциацию. Например было isPrint (переменная, отвечающая надо ли выводить на печать объект) стало m_isPrint - опечаткой. Была руда ore, стала m_ore - "больше".
Печатать _() в списке инициализации проще Я не настаиваю использовать мой способ, лишь аргументирую выбор.
Цитата Сообщение от silent_1991 Посмотреть сообщение
При касте тип не изменится ведь. Переменная как была инт, так и останется.
я перемудрил
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.02.2013, 23:11 #21
Цитата Сообщение от MrGluck Посмотреть сообщение
тем, что не является буквой и не коверкает запись, ассоциацию. Например было isPrint (переменная, отвечающая надо ли выводить на печать объект) стало m_isPrint - опечаткой. Была руда ore, стала m_ore - "больше".
Да ладно вам, с моей точки зрения аргументы притянуты за уши. Если бы не было нижнего подчёркивания - был бы полностью с вами согласен. Однако оно есть, и это кардинально меняет картину.
Однако никому своё мнение на навязываю, естественно. Кто как хочет - тот так и пишет. Главное - следовать корпоративным стандартам кодирования - и всё будет замечательно!
Dmitriy_M
1342 / 1223 / 112
Регистрация: 20.03.2009
Сообщений: 4,408
Записей в блоге: 11
02.02.2013, 14:37 #22
Цитата Сообщение от hinst Посмотреть сообщение
так всё и есть, только я про смену типа, а не про смену имени переменной.
Пример давай. Тип переменной от каста не меняется.
Цитата Сообщение от hinst Посмотреть сообщение
this->
усложняет чтение.

Цитата Сообщение от MrGluck Посмотреть сообщение
тем, что не является буквой и не коверкает запись, ассоциацию. Например было isPrint (переменная, отвечающая надо ли выводить на печать объект) стало m_isPrint - опечаткой. Была руда ore, стала m_ore - "больше".
Не аргумент. Если не используются символы _, для разделения слов(signal_number), то m_ ассоциируется как method.
В случает с m_ore и more, это в какой конвенции можно спутать?

Цитата Сообщение от silent_1991 Посмотреть сообщение
Главное - следовать корпоративным стандартам кодирования - и всё будет замечательно!
Нужно придерживаться одного стиля внутри проекта. Особенно актуально в OpenSource проектах.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.02.2013, 15:01 #23
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
m_ ассоциируется как method
member всё-таки...
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Нужно придерживаться одного стиля внутри проекта.
А это как-то опровергает моё высказывание?
XRuZzz
Антикодер
675 / 576 / 28
Регистрация: 15.09.2012
Сообщений: 2,522
07.02.2013, 10:12 #24
сокращенные суффиксы и префиксы вытесняют (как бы занимают ваше внимание) осмысленные названия сущностей.
Чем короче и понятнее название переменной или атрибута класса тем лучше.
Пример
C++
1
Dates dateOfBirth;
из названия ясно, что речь идёт о дате, уже можно примерно догадываться о типе.
Или другой пример например атрибут класса Dates
C++
1
2
3
4
5
6
7
8
class Dates
{
    public:
       ...
       void setDay(int);
       int getDay();
    private:
       int day;
попробуем то же самое сделать с помощью венгерской нотации

C++
1
2
3
4
5
6
7
8
class СDates
{
    public:
       ...
       void setM_iDay(int);                    // ???
       int getM_iDay();                         // ???
    private:
       int m_iDay;
Такой результат может получиться при автоматической генерации сеттеров геттеров с помощью IDE.(ведь код должен быть устойчив к обработке разными IDE)

Другое дело указатели

C++
1
      Dates *pDateOfBirth;
IDE возможно сама узнает префикс p и корректно с генерирует сеттеры и геттеры. Но я их иногда привожу к виду:
setDateOfBirthPointer

Добавлено через 11 минут
в реальности (в Eclipse) получилось так

C++
1
2
3
4
5
6
...
        int getIHouseNumber() const;
        void setIHouseNumber(int iHouseNumber);
    private:
        int m_iHouseNumber;
...
но мне даже буква I в сеттерах геттерах не нужна.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.02.2013, 10:22 #25
Джоэль как-то уже плакался на эту тему (rooskie). Что люди нихрена не понимают, что такое настоящая венгерская нотация.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 10:22
Привет! Вот еще темы с ответами:

Обьесните преимущество использования Web-сервисов и есть ли оно вообще - C# WCF
Здравствуйте друзья. Web сервисы используют как посредник между базой и клиентским приложеним. Ведь можно подключиться к базе и через...

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

HIS HD 5770 надо ли оно мне? - Видеокарты
комп: amd athlon 5600 x2 2,9Ghz ATIradeon HIS hd3870 iceq3TURBO 2 512mb\256bit, 2GB ОЗУ (OCZ sys) 500wt БП, думаю менять видяху......

Какой БП лучше? Или вообще надо другой? - Блоки питания
Всем привет Конфиг: Характеристики: Мат. плата: Asus P5KPL-VM (2 PCI, 1 PCI-E x1, 1 PCI-E x16, 2 DDR2 DIMM, Audio, Video, Gigabit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.02.2013, 10:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru