47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
|
|
1 | |
Венгерская нотация, оно вообще надо?22.01.2013, 16:54. Показов 5606. Ответов 24
Метки нет (Все метки)
Вопрос в заголовке. Больше всего смущает префикс m_ для приватных членов класса, ни информативности на красоты, а печатать дольше. Общее мнение рудимент или хороший стиль?
0
|
22.01.2013, 16:54 | |
Ответы с готовыми решениями:
24
надо помочь лабами........что-то вообще никак... прогп работает ,но надо чтлб оно выходило с помощию функций Венгерская нотация. А что вы думаете? Что это вообще такое и зачем оно надо: #include <файл> и using name space std? |
4767 / 2577 / 892
Регистрация: 29.11.2010
Сообщений: 5,573
|
|
22.01.2013, 22:09 | 3 |
Из опыта скажу -- устарело.
Современный код короткий, абстрагирован и разбит на много-много сущностей. В добавок, если проект долгосрочный, этого кода еще и дофига великого. Венгерская нотация ухудшает читаемость коротких кусков кода и, как следствие, уменьшает скорость работы с ним. Кроме того, уже давно придуманы более читаемые code style без особой потери смысла. Например, google code style. Конечно, все зависит от особенностей работы. В компании может быть принят code-style (майкрософт, например) или исторически кодят спагеттинами.
0
|
Higher
|
|
22.01.2013, 22:17 | 4 |
Ее придумал какой-то венгерский программист из майкрософта. Но потом, ЕМНИП, сам же майкрософт признал, что это очень плохая вещь, и использовать ее не стоит.
Ну, может быть, ее можно использовать в каких-нибудь динамически типизированных языках(это чуть-чуть компенсирует нехватку информации о типах), но в с++ - ни в коем случае.
0
|
Каратель
|
|
23.01.2013, 01:35 | 5 |
красота понятие относительное, информативность зависит от конкретного названия, а префикс m как раз и информирует о том что обращаются к члену класса, а не к локальной переменной
0
|
23.01.2013, 08:31 | 6 | |||||
Это лучше чем тут.
И не так уж плохо по сравнению с исходниками Qt. Кликните здесь для просмотра всего текста
0
|
47 / 47 / 9
Регистрация: 13.02.2012
Сообщений: 176
|
|
23.01.2013, 14:09 [ТС] | 7 |
Qt стиль смущает огромным количеством макросов конечно, это сильно уродует код. Но в целом меня он полностью устраивает.
По той ссылке, что вы привели, есть только одно "не хорошее" правило. Начинать с Q названия всех публичных классов и с q всех публичных методов, но это актуально только если лезть внутрь самого Qt. Если писать приложения с использованием этого фреймворка это очень помогает отличить классы приложения от внутренних классов Qt. По венгерской нотации я делаю вывод, что это рудимент. И это хорошо.
0
|
23.01.2013, 21:00 | 8 |
Если читал внимательно, там ничего не сказано, про именование членов данных, а в самом коде они именуются не ахти как.
Бабка на двое сказала. Для своих проектов предпочитаю стандарт кодирования близкий к венгерской.
0
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
28.01.2013, 21:05 | 9 |
0
|
23 / 9 / 2
Регистрация: 06.01.2013
Сообщений: 113
|
|
28.01.2013, 21:51 | 10 |
надо провести исследование. Написать большущую программу на C++ например. Потом переписать всё то же самое с Венгерской нотацией. Посадить 100 случайных прогеров смотреть первую программу, ещё 100 случайных прогеров смотреть вторую программу, раздать им опросники типа "оцените читаемость кода от 0 до 10, оцените как вам нравится этот код". Тогда можно будет что-нибудь конкретно сказать. И то только в отношении C++ и в отношении читаемости кода.
А вообще я лично считаю что венгерская нотация не_нужна. Но я не эксперт... по нотациям. На жабе написаны же проекты по 100500 строк кода, всё без этой нотации, тот же Spring Framework, и всё там вроде читаемо
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
28.01.2013, 22:25 | 11 |
А если тип преобразуется? То нотация будет служить уже как дезинформация.
И сортировка переменных с учетом принадлежности даст неверный результат. Во всех нормальных IDE тип переменной итак можно узнать, в С++ в конце концов есть typeid().name(). Для чего создавать лишние записи неизвестно. Вот верблюжья нотация - другое дело, нужная вещь
0
|
28.01.2013, 23:07 | 12 |
Далеко ходить не надо, возьми книжку Шлее по Qt.
В Java есть свой стандарт, а единого в C и C++ нет. К примеру, если атрибуты именовать так _атрибут, то IDE может выдать кучу всего после _, т.к. довольно распространенный способ, и местами применяется к типам и функциям. Если именовать атрибут_, то вряд ли через 6-12 месяцев, ты вспомнишь все атрибуты класса, когда придется что-то дописывать. Если нормально именовать переменные, то в этом случает при авто дополнение будут отображаться временные переменные, что может привести к дополнительным ошибкам. Торвальдс тот еще тролль. Что стоит его комментарии на тему C++. Однако же при работе с полиморфными типами, только во время выполнения узнаешь что там такое. Добавлено через 1 минуту Есть, а что ты будешь с этим делать?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
31.01.2013, 12:01 | 13 |
Хм. Почему? Я не сторонник венгерской нотации (однако когда пишу на плюсах, приватные поля класса всё же снабжаю префиксом m_), но просто не понятно, как она может дезинформировать.
0
|
23 / 9 / 2
Регистрация: 06.01.2013
Сообщений: 113
|
|
31.01.2013, 23:15 | 14 |
ну так если у тебя был int x; а потом ты решишь приписывать везде постфиксы, и станет int xint; ну а третьем шагом на пути к дезинформации станет замена типа, когда ты, например, поймёшь, что тебе нужны и дробные значения, и станет double xint; но хотя он будет иметь тип double, но называться он будет всё ещё xint...
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
01.02.2013, 10:16 | 18 |
При касте тип не изменится ведь. Переменная как была инт, так и останется. Это результат станет нового типа, но какое это отношение имеет к исходной переменной?
0
|
23 / 9 / 2
Регистрация: 06.01.2013
Сообщений: 113
|
|
01.02.2013, 18:16 | 19 |
я думаю что знак_подчёркивания плохо подходит с точки зрения автодополнения потому, что в C++ глобальное пространство имён засорено разнообразными идентификаторами на _, которые при использовании автодополнения, скорее всего, повалятся, всякие там макросы. Тут логичнее ко всем полям класса обращаться через this-> тогда и автодополнение покажет только члены класса, и в местах обращения к членам класса сразу будет видно что идёт обращение к членам класса. Так же я лично часто вообще стараюсь избегать обращения к полям класса не через get..., set..., или через Свойство в языках где есть поддержка свойств
так всё и есть, только я про смену типа, а не про смену имени переменной. вот и я думаю, что никакого отношения не имеет, это тут ни при чём.
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
01.02.2013, 19:35 | 20 |
тем, что не является буквой и не коверкает запись, ассоциацию. Например было isPrint (переменная, отвечающая надо ли выводить на печать объект) стало m_isPrint - опечаткой. Была руда ore, стала m_ore - "больше".
Печатать _() в списке инициализации проще Я не настаиваю использовать мой способ, лишь аргументирую выбор. я перемудрил
0
|
01.02.2013, 19:35 | |
01.02.2013, 19:35 | |
Помогаю со студенческими работами здесь
20
С самого начала думал что будет как и раньше, просто добавить массив но нет. Теперь оно вообще работать не хочет Обьесните преимущество использования Web-сервисов и есть ли оно вообще Внешняя видеокарта. Есть у кого-то опыт? Стоит ли оно вообще того? HIS HD 5770 надо ли оно мне? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |