|
|
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Драсте... Сразу признаюсь, что сами мы не местные, но волею судеб сюда попали... Болеем :) Я VB-шник и очень сильно прикипел к венгерской нотации именования переменных, ну знаете, там, область видимости, тип и т.п. Начав изучать С++ я столкнулся с проблемой: каковы правила именования переменных? Ну да, "h..." - это хэндл, но где здесь, простите, место под область видимости? Я, конечно, могу написать "gh...", но это сразу выпадает из принятого (по моим изучениям исходников) стиля кодирования всех сишников! Вообще, самая огромаднейшая проблема в том, что в С всё то, что ты видишь, это не то, что есть, а то, что кто-то хотел, чтобы это было тем, что ты видишь... Всё ясно? Мне тоже, но уж больно путанно :( Так вот у меня делема: либо пользовать "VB-шную венгерскую нотацию" и понимать свой код, но обречь правоприемников (реальных Сишников) на грех в виде меня проклинания, либо идти по пути сишников (по поводу наименованй переменных) и каждый раз, чтобы узнать о переменной кто она и что вообще имеется в виду под "th32..." мне надо прыгать до места ее определения (возможно несколько раз прыгать). Чего посоветуете? Возможно я еще не "ухватил" суть в этом вопросе, не набил руку, так сказать. И вообще, где можно увидеть сишную нотацию или принятые правила наименования переменных, как цельную картину? Помогите, пожалста... зы. Две книжки честно прочитаны, msdn честно листается, форум честно просматривается, но нигде четких правил и рекомендаций не находится... зы2. Не язык, а просто СУПЕР!!! Если чего-то не работает, то это точно моя ошибка, а не баг среды разработки, как например в (не бейте больно) Аксесс :) Очень доволен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 17:43 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
...нигде четких правил и рекомендаций не находится... Так и нет никаких "четких" правил о именовании переменных, как нет правил о стиле программирования на С++. Это вот в Java есть целый документ, который так и зовется — "Java Code Conventions". А в С++ каждый пишет так, как ему нравится. Или если разработку ведет не один человек, а команда, то тогда все вместе договариваются о правилах. Я например для себя выбрал стиль Java. А ты можешь выбрать стиль VB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 17:56 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Нуф>Начав изучать С++ я столкнулся с проблемой: каковы правила именования переменных? ... Чего посоветуете? http://www.possibility.com/Cpp/CppCodingStandard.html Ален Голуб "ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ: Правила программирования на C и C++" - найди в интернете, мне очень понравилась. Согласен с Ingvarwolf, если пишешь один, выбираешь стиль, который тебе по душе, а если в команде, то там, как правило, свои стандарты. Нуф>Не язык, а просто СУПЕР!!! Угу, мне тоже очень понравился. За пол года общения с ним, все больше спрашиваю себя, почему не взялся за него раньше. P.S. Заглядывай на rsdn.ru очень много интересного. Я пока там только в режиме "readonly", как ты говорил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 19:45 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
для Ingvarwolf: Понятно. Просто С/С++ один из стандартизированных языков, вот и подумалось, что должно быть нечто вроде стандарта. Спасибо за меня просветление :) для Александра: Александр, огромное спасибо за подсказку на счет "Веревки"! Нашел, загрузил и уже начал читать. Собсна, именно поэтому и не ответил сразу - зачитался :) Действительно хорошо написано. Особенно во вступлении, что, типа, к потрясающей гибкости, которую дают С/С++ надо еще и голову прикладывать... оказывается :) Спасибо за ссылки! Да... На счет рсдна... Я там стабильно только (пока) WinAPI ЧИТАЮ :), времени на хобби, к сожалению, категорически не хватает :( Но думаю что когда разберусь с азами С++ времени станет побольше - книги по плюсам станут не фантастическими романами, а справочниками, и вот тогда и там "риадонли" появлюсь :) Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2003, 23:58 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
в С++ есть такое дело - namespaces, зело полезная штуковина в проектах размеров выше десятков классов. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2003, 00:06 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
для vdimas: Ну да, ну да... namespace... Только пока (надеюсь, что только пока:) использование этого дела не грозит - текущий "проект" достаточно мал, чтобы использовать нэймспэйсы. vdimas...namespaces, зело полезная штуковина в проектах размеров выше десятков классов А вот здесь не очень понятно :( Разве сами классы не ограничивают область видимости полей данных и методов класса? Зачем еще и нэймспэйс к классам прикручивать? Если ответ сложен, то лучшим ответом будет "Подрастешь - узнаешь" :) для JibSkeart: Это был камень? В мой огород? На основе сказанного мной ("...Две книжки честно прочитаны...") и vdimas'ом? Хм... А при чем тут правила именования переменных (см. тему топика)? Чего я не понял? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2003, 11:59 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Разве сами классы не ограничивают область видимости полей данных и методов класса? Namespace предназначен немного для другого. Классы ограничивают доступ к членам и методам класса. То есть например у класса есть несколько свойств, их как правило, делают недоступными извне, а вот чтобы изменить эти свойства, создают методы доступа к ним. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А неймспейсы созданы для того, чтобы не возникало конфликтов имен. Конфликты обычно возникают когда начинаешь использовать кроме своего кода еще чей-то... А ведь каждый называет классы так, как ему нравится и старается назвать покороче и поинформативнее. Как пример: как ты назовешь класс, который описывает функциональность узла дерева? В 9 из 10 случаях TreeNode. А сколько еще программистов назовут такой класс точно так же? А если позже ты будешь использовать чью-то библиотеку классов и там вдруг встретится класс с таким же именем как у тебя? Вот для таких вот случаев и были придуманы неймспейсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2003, 20:02 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Сам я стараюсь называть методы как можно проще, именно что-то типа TreeNode, Reader, Connection, User, Role, Exception, MemStream и т.д. и я использую namespaces для разделения областей видимости внутри своих проектов в том числе, а не только для отделения от "чужого" кода... для private и protected переменных класса не гнушаюсь приставкой m_, т.е. m_x, m_y и т.д., если же открываю переменные как public (да, бывает и такое), то это будут, разумеется X и Y. Привычку ставить "типизированные" приставки к полям класса не имею, однако частенько использую это для локальных переменных в целях самодокументирования: bExit, nCount и т.д. (интерфейсы классов, как обычно, и так очень подробно документированы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 06:49 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Венгерская нотация - старая песня - и слава богу постепенно забываемая даже той же MS (в .Net MS официально рекомендует ее не использовать) Сколько помню - все авторитетные люди в С++ ее всегда критиковали (С++ не ассемблер - там она как раз к месту - так как там программист знает о переменной только ее имя). Так что Нуф-нуф мне просто даже интересно - зачем она вам нужна? Какие преимущества вы хотите с ее помощью получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 13:44 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
2vdimas конфликт имен к венгерской нотации не имеет ни какого отношения - ее цель - это дать программисту сведения о типе переменной по ее имени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 13:46 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Во-первых, спасибо Ingvarwolf и vdimas за "нэймспэйсы" - стало яснее. На счет непосредственно темы топика - самой венгерской нотации и того, зачем же она мне нужна... Еще раз отмечу, что я VB-шник, где венгерская нотация всегда считалась стандартом. Да и без ссылки на стандартизацию могу заметить, что при помощи венг.нотации мне достаточно одного взгляда на переменную, скажем, 'mlngDogAge', чтобы сказать, что это переменная уровня модуля, которая имеет тип данных длинное целое и хранит она в себе возраст собачки. Странно, конечно, что длинное целое, а не байт, но тем не менее я это сразу вижу. А в Си? Без всяких префиксов эта переменная будет выглядеть как "DogAge"? И что, я читая даже собственный код должен постоянно угадывать область видимости этой переменной, ее тип, который не столь очевиден, как, например тип в переменной 'pDogAge', где я вижу указатель и могу ДОГАДАТЬСЯ, что он 32-х разрядный... А может 16 под Вин3.1? А может 64-х под 64 разрядную Вин2к? Ну да, коль скоро это моё приложение, то я знаю, под какую платформу я его делаю, но принцип моих затруднений по данному поводу думаю должен быть ясен... Впрочем, на данный момент всё становится несколько понятней - читаю материал по любезно предоставленным мне ссылкам (за что огромное спасибо) и, всё ж таки, иногда изобретаю собственный велосипед в виде префиксов к переменным. Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 16:29 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
Может просто почитать книжку ? и многи вопросы отпадут ... одного взгляда на переменную, скажем, 'mlngDogAge', чтобы сказать, что это переменная уровня модуля, которая имеет тип данных длинное целое и хранит она в себе возраст собачки. а у нас можно взглянуть на тип char DogAge; int DogAge; long int DogAge; ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 17:49 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
может я чего не догоняю. имо, переменная, видимая за пределами функции - неправильно. всегда стараюсь этого избегать. когда я оперирую таким свойством собаки как возраст я не задумываюсь, как создатель этого объекта(DOG) определил тип свойства возраст(AGE). я предполагаю что это целое. если мне понадубится хранить не целое а дробное, а компилятор ругается - переопределю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 19:15 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
для JibSkeart: >а у нас можно взглянуть на тип А у "нас" тоже можно взглянуть: Код: plaintext 1. >Может просто почитать книжку ? и многи вопросы отпадут ... Например такие, где описывается как у "вас" "можно взглянуть на тип"? А разве я задавал "такие вопросы"? Разве я спросил: "Люди, а как объявить переменную?"??? Я спросил: "Люди, а как принято правильно называть переменные в Си? (имея в виду префиксы и т.п.)" Впрочем, я повторяюсь... >а насчет указателей что то непонятно , >у меня как то таких вопросов не вазникало ... Ну так почитайте Рихтера, что ли... О вызовах 16 разрядных dll, которые ожидают "короткие" указатели... О 64 разрядных Виндах, о типе int, в конце концов (а я видел и определенные с типом int указатели). Мне ли вам советовать? С уважением. для alex_k: >имо, переменная, видимая за пределами функции - неправильно В идеале - так и есть. Значительно облегчается сопровождение, уменьшается вероятность ошибок, исключаются "наведенные" (или "побочные") эффекты вызова функций и т.п. Но! Но мы же живем в реальном, а не идеальном мире. Ну вот, предположим, такая "реальная" ситуация: есть два десятка функций, половина из которых работает с одним и тем же параметром (конечно, на ряду с другими уникальными для каждой функции параметрами). Скажем, этот общий параметр Идентификатор текущего процесса, ну или, hWnd какого-то окна... Лично я никогда не буду в десятках функций объявлять этот общий параметр и постоянно его перекидывать между ними. Во-первых потому, что усложняется сопровождение, во-вторых, как это ни смешно и не профессионально может показаться, это снижает производительность. А рекурсивные функции, для чего-нить использующие общий параметр? Случаи ведь бывают разные... >...я не задумываюсь, как создатель этого объекта(DOG) определил тип свойства возраст(AGE). Нда, должен признать, что в VB обзывая паблик-методы классов я не использовал венгерскую нотацию - просто давал понятное, "самодокументируемое" имя и всё... Действительно так... Но вот во внутренней реализации класса я использовал префиксы, что было очень удобно. Вообщем, я понял ход ваших мыслей по данному поводу. Теперь надо это дело "принять" :) Спасибо за сеанс моевтики :) для All: Еще раз всех благодарю и закрываю (для себя) топик - основная идея по поводу наименования переменных в Си понятна - префиксы избыточны. Осталось либо это дело принять, "прочувствовать", так сказать, либо... либо всю оставшуюся жисть вызывать улыбки у Сишников :) С наступающим Новым Годом! Удачи Вам! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2003, 21:01 |
|
||
|
Венгерская нотация в С++?
|
|||
|---|---|---|---|
|
#18+
А вот фиг вам топик закрыть. Я тоже выскажуся. И мне дайте, и мне. Префиксы в именах - это наследие 1) большого количества переменных и 2) достаточно простой их типизации, когда по префиксу действительно все понятно и тип скорее всего не будет никак меняться при развитии программы / модуля / класса. При переходе на плюсы переменные имеют склонность менять тип по ходу дела. Скажем, придумал кто-то что нечто есть последовательность цифр. Номер какой-нибудь. Не долго думая в целый тип его. А это не число. Его нельзя складывать, например. Потом оказывается, что количество цифр может быть этак 40 штук. Или со временем выясняется, что в последовательности должны быть также точка. Потом вторая. Решение проблемы обычно просто в смене типа. typedef int numsequence ; // это было сначала typedef std::string numsequence ; // стало потом Потом выясняется, что операция сравнения двух таких хреней не строковая, а более хитрая. Становится class TNumSequence{...}; typedef numsequence TNumSequence; Но в кодах юзания все равно остается инвариантный код типа vector<numsequence> codes; Нуф-нуф, если у тебя коды малые - то не бери в голову, пиши как тебе понятнее. Если коды пошли расти или предполагается их рост - попробуй учесть и такой вот фактор. А лучше делай так, чтобы переменных в любой области видимости было минимальное число. Это хорошее правило для сравнения двух вариантов. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2003, 12:22 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32365881&tid=2035577]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 321ms |

| 0 / 0 |
