Оформление кода: Венгерская нотация
От: Pushkin Россия www.linkbit.com
Дата: 27.11.02 08:12
Оценка: 9 (1)
Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.
Re: Венгерская нотация
От: Demiurg  
Дата: 27.11.02 08:27
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


Не знаю... Я не считаю себя программистом старой школы, но с префиксами мне удобнее и никакие ассисты их не заменят. Да и нет их в ассемблере, например.
Re: Венгерская нотация
От: _Dinosaur Россия  
Дата: 27.11.02 08:30
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


Полагаю, что использование префиксов повышает читабельность исходников.
Однако, считаю неудобным, когда префикс занимает половину имени переменной.
На мой взгляд, для обозначения префикса достаточно одного-двух символов.
Завидую людям, которые могут себе позволить никуда не спешить.
Re[2]: Венгерская нотация
От: Lexey Россия  
Дата: 27.11.02 08:39
Оценка:
Здравствуйте, _Dinosaur, Вы писали:

D>Здравствуйте, Pushkin, Вы писали:


P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


D>Полагаю, что использование префиксов повышает читабельность исходников.


А я так не думаю. VA повышает читабельность гораздо лучше.
Однако, корпоративный стандарт требует префиксов.

D>Однако, считаю неудобным, когда префикс занимает половину имени переменной.

D>На мой взгляд, для обозначения префикса достаточно одного-двух символов.

С этим согласен.
Re: Венгерская нотация
От: dmz Россия  
Дата: 27.11.02 08:42
Оценка: 1 (1) +1
P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам
Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

P>Мне почему-то кажется, что в приходом всевозможных VAssist-ов

P>реальная необходимость в этом постепенно отмирает. И держится это
Этой необходимости и не было никогда, при нормальном подходе к кодированию.
Re[3]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 27.11.02 08:47
Оценка:
Здравствуйте, Lexey.

Да, VA неплохое расширение IDE MSVC++.
Но комфорт обеспечивается засчет колоссального объема памяти и существенной загрузки процессора.
У меня не раз VA ставил раком MSVC и винды.
Завидую людям, которые могут себе позволить никуда не спешить.
Re: Венгерская нотация
От: Sergey Россия  
Дата: 27.11.02 09:13
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


Сначала надо договориться, про программирование на каком языке мы тут будем флеймить
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Поиск
От: UgN  
Дата: 27.11.02 10:24
Оценка:
здесь
Автор: Odi$$ey
Дата: 24.09.01
Re[2]: Поиск
От: Pushkin Россия www.linkbit.com
Дата: 27.11.02 12:13
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>здесь
Автор: Odi$$ey
Дата: 24.09.01


Каюсь, не посмотрел. Но там всего один раз и вскользь про VAssist.
Мне кажется, современные "умные" среды это бомба под все разговоры об именах переменных.
Т.е. не вопрос — доп. информация это хорошо. Но и внятное имя — тоже хорошо. Нужен компромисс. С появлением и дальнейшем развитием средств разработки равновесие неуклонно сдвигается в сторону естественного языка (я об имени переменных сейчас говорю, не гоните меня в бэйсик, хотя и в языке тоже сдвигается...). Тенденция есть?
Re[2]: Венгерская нотация
От: small_cat Россия  
Дата: 27.11.02 12:39
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.


А ссылочку мона?
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[2]: Венгерская нотация
От: Pushkin Россия www.linkbit.com
Дата: 27.11.02 13:03
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Сначала надо договориться, про программирование на каком языке мы тут будем флеймить


Я вообще C++ имел в виду, но, думаю, это общая проблема.
Re[3]: Венгерская нотация
От: Sergey Россия  
Дата: 27.11.02 13:33
Оценка:
Здравствуйте, Pushkin, Вы писали:

S>>Сначала надо договориться, про программирование на каком языке мы тут будем флеймить


P>Я вообще C++ имел в виду, но, думаю, это общая проблема.


Да почему же общая-то? Например в ассемблере или даже С смысл в венгерке есть, в С++ — совсем немного, в VB — почти никакого. Я уж не гооврю про перлы всякие и awk .
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Венгерская нотация
От: Рек Россия  
Дата: 27.11.02 15:04
Оценка: 18 (2) +1
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.



До меня тут совсем недавно дошло
почему венгерская нотация не нужна!


Просто потому, что если программа правильно ОО-организованна
и язык позволяет (а С++ и С# позволяют!)

действия с объектами разного типа производятся единообразно
и их тип при чтении программы не надо досконально точно помнить.

Вот пример

printf("%s", a); //рванёт? не знаю. надо знаmь тип а.

cout << a; // точно не рванёт.

(Потому printf — это пережиток, а << — это супер.)

Короче, тип либо ясен из контектса, либо не важен.



(Старого С, и темболее ассемблера это не касается.)
Re[2]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 27.11.02 15:25
Оценка:
Здравствуйте, Рек, Вы писали:

Рек>Здравствуйте, Pushkin, Вы писали:


P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


Рек>

Рек>До меня тут совсем недавно дошло
Рек>почему венгерская нотация не нужна!

Рек>

Рек>Просто потому, что если программа правильно ОО-организованна
Рек>и язык позволяет (а С++ и С# позволяют!)

Рек>действия с объектами разного типа производятся единообразно

Рек>и их тип при чтении программы не надо досконально точно помнить.

Рек>Вот пример


Рек>printf("%s", a); //рванёт? не знаю. надо знаmь тип а.


Рек>cout << a; // точно не рванёт.


Рек>(Потому printf — это пережиток, а << — это супер.)


Рек>Короче, тип либо ясен из контектса, либо не важен.


При выводе понятно, а при формировании а

А как насчет глобальных переменных, статических членов класса,
различных типов (например указателей на функцию) и т.д.
Завидую людям, которые могут себе позволить никуда не спешить.
Re[3]: Венгерская нотация
От: Рек Россия  
Дата: 27.11.02 15:37
Оценка:
Здравствуйте, _Dinosaur, Вы писали:

D>Здравствуйте, Рек, Вы писали:


Рек>>Вот пример

Рек>>printf("%s", a); //рванёт? не знаю. надо знаmь тип а.
Рек>>cout << a; // точно не рванёт.
Рек>>(Потому printf — это пережиток, а << — это супер.)
Рек>>Короче, тип либо ясен из контектса, либо не важен.

D>При выводе понятно, а при формировании а


D>А как насчет глобальных переменных, статических членов класса,

D>различных типов (например указателей на функцию) и т.д.

Тут нет проблем.
Если ты чтото слеаешь не так, компилятор даст по рукам.
Не даст (случайно) совершить ошибку.

Он (компилятор) будет следить за правильным синтаксисом
и правилами перобразования типов,
а тебе остаётся заниматься смыслом программы.
Re[4]: Венгерская нотация
От: UgN  
Дата: 27.11.02 15:42
Оценка: 6 (1) +3
Здравствуйте, Рек, Вы писали:

Рек>Тут нет проблем.

Рек>Если ты чтото слеаешь не так, компилятор даст по рукам.

А руки не заболят?

Зачем ждать пока компилятор ругнется? Время девать некуда?

К тому же компилятор многое может пропустить.

Не надо стремиться быть глупее компьютеров (компиляторов).

Лучше сразу писать все правильно и сообразно.
Re[3]: Венгерская нотация
От: Хитрик Денис Россия RSDN
Дата: 27.11.02 17:23
Оценка: -1
Здравствуйте, small_cat, Вы писали:

dmz>>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

SC>А ссылочку мона?

А поискать по форуму?
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: Венгерская нотация
От: _grom_  
Дата: 27.11.02 20:51
Оценка: 15 (2)
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще.


Я считаю, что такие префиксы могут быть (возможно) полезны в плохо организованном коде написанном несколькими незнакомыми людьми. Мое мнение — префиксы мешают жить. Как тут правильно писалось, в хорошем коде нет надобности во всяких lpszstr. А если тебе не понятно что за хитрая переменная 'lpObjIdontKnowWhatIsIt' то ты все равно полезешь смотреть где она объявлена, заодно и тип посмотришь.

P.S. Нет — излишним префиксам!
Re: Венгерская нотация
От: WolfHound  
Дата: 27.11.02 21:02
Оценка:
Здравствуйте Pushkin, Вы писали:

m_ — Челен класса
s_ — Статический челен класса
g_ — Глобальная переменная
C_ — Мной написаный класс
T_ — Мной написаный шаблон класса

В других префиксах нужды не испытываю.
... << RSDN@Home 1.0 alpha 12 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 28.11.02 07:27
Оценка:
Здравствуйте, Рек, Вы писали:

Рек>Тут нет проблем.

Рек>Если ты чтото слеаешь не так, компилятор даст по рукам.
Рек>Не даст (случайно) совершить ошибку.

Рек>Он (компилятор) будет следить за правильным синтаксисом

Рек>и правилами перобразования типов,
Рек>а тебе остаётся заниматься смыслом программы.

При большом объеме исходников
уже не помнишь какая переменная какого типа и зачем она нужна.
Имя переменной (с префиксом конечно же) может быстро это напомнить.
Когда я работал в Делфях или на асме что-то ваял, то не использовал венгерскую нотацию
и мне приходилось постоянно лазить в описания классов, описания переменных для модуля, функции и т.д.
После того как я перешел на MSVC и привык к венгерской нотации, стало намного проще разбираться в исходниках.
Завидую людям, которые могут себе позволить никуда не спешить.
Re[2]: Венгерская нотация
От: Awaken Украина  
Дата: 28.11.02 11:01
Оценка:
Здравствуйте, dmz, Вы писали:

P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам

dmz>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

префиксы имени это хорошо (например m_hInstance понятно что член класса,
а без m это была бы локальная переменная)

но когда я вижу объявление типа LPCTSTR lpszMessage меня просто выворачивает
наизнанку
Re[3]: Венгерская нотация
От: dmz Россия  
Дата: 28.11.02 12:23
Оценка:
A>префиксы имени это хорошо (например m_hInstance понятно что член класса,
A>а без m это была бы локальная переменная)

А неужели без этого префикса непонятно? Что непонятного в конструкции anObject.instance ?
Re[4]: Венгерская нотация
От: Constructor  
Дата: 28.11.02 12:30
Оценка:
Здравствуйте, dmz, Вы писали:

A>>префиксы имени это хорошо (например m_hInstance понятно что член класса,

A>>а без m это была бы локальная переменная)

dmz>А неужели без этого префикса непонятно? Что непонятного в конструкции anObject.instance ?


В констркуции anObject.instance понятно. А вот в теле функции строчек в 20 и поболее уже не понятно!

void f()
{
   //...
   instance.f1(); // 21-я строка   
}
Re[2]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 28.11.02 14:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте Pushkin, Вы писали:


WH>m_ — Челен класса

WH>s_ — Статический челен класса
WH>g_ — Глобальная переменная
WH>C_ — Мной написаный класс
WH>T_ — Мной написаный шаблон класса

WH>В других префиксах нужды не испытываю.


WH>

Подчерк лишний. Вместо него можно вставить префикс типа переменной.
Завидую людям, которые могут себе позволить никуда не спешить.
Re[2]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 28.11.02 14:28
Оценка:
Здравствуйте, _grom_, Вы писали:

G>Здравствуйте, Pushkin, Вы писали:


P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще.


G>Я считаю, что такие префиксы могут быть (возможно) полезны в плохо организованном коде написанном несколькими незнакомыми людьми.


Даже если код хорошо организован, программист через месяц с трудом прочитает его с первого раза.

G> Мое мнение — префиксы мешают жить.


см. (*)

G>Как тут правильно писалось, в хорошем коде нет надобности во всяких lpszstr. А если тебе не понятно что за хитрая переменная 'lpObjIdontKnowWhatIsIt' то ты все равно полезешь смотреть где она объявлена, заодно и тип посмотришь.


G>P.S. Нет — излишним префиксам!


(*) А в этой фразе ты все-таки не отказываешься от использования префиксов?
С фразой в такой постановке я согласен.
Завидую людям, которые могут себе позволить никуда не спешить.
Re[4]: Венгерская нотация
От: Pushkin Россия www.linkbit.com
Дата: 28.11.02 15:52
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Да почему же общая-то? Например в ассемблере или даже С смысл в венгерке есть, в С++ — совсем немного, в VB — почти никакого. Я уж не гооврю про перлы всякие и awk .


Ассемблер как-то выпал из моего поля зрения
Не писал на нём никогда
А для остальных...
Умную среду можно навесить на любой язык.
А если в нём (языке) вообще как бы и нет типов, то вообще о чём говорить..
Re[5]: Венгерская нотация
От: Pushkin Россия www.linkbit.com
Дата: 28.11.02 15:55
Оценка:
Здравствуйте, UgN, Вы писали:

UgN>Не надо стремиться быть глупее компьютеров (компиляторов).


Современные компиляторы в 64 тыщи раз умнее нас
Re[5]: Венгерская нотация
От: Pushkin Россия www.linkbit.com
Дата: 28.11.02 15:58
Оценка:
Здравствуйте, _Dinosaur, Вы писали:

D>Когда я работал в Делфях или на асме что-то ваял, то не использовал венгерскую нотацию

D>и мне приходилось постоянно лазить в описания классов, описания переменных для модуля, функции и т.д.

Проблема в том, что у тебя не было умной среды — там курсор наводишь на переменную и всё пронеё видишь.

D>После того как я перешел на MSVC и привык к венгерской нотации, стало намного проще разбираться в исходниках.


А вот здесь среда как раз замечательная, а с add-ins и вовсе мечта.
Re: Венгерская нотация
От: Аноним  
Дата: 28.11.02 23:18
Оценка:
От венгерской нотации вроде отказались даже те кто ее придумал то есть M$. Посмотрите например GDI+. Да и вон под юниксами всякими хоть у людей никогда никаких Visual Assist-ов не было они уродств типа lpszName не городили.
Re[4]: Венгерская нотация
От: Andir Россия
Дата: 29.11.02 00:16
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Здравствуйте, small_cat, Вы писали:


dmz>>>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

SC>>А ссылочку мона?

ХД>А поискать по форуму?

А я например почему-то не нашёл ...

C Уважением, Andir!
... << RSDN@Home 1.0 alpha 13 (edit for using proxy) >>
Re[5]: Венгерская нотация
От: Andir Россия
Дата: 29.11.02 00:31
Оценка:
Здравствуйте, Andir, Вы писали:

ХД>>А поискать по форуму?

A>А я например почему-то не нашёл ...
Уточнюсь, уже нашёл просто там кто-то написал Аллен Голуб, на такое поиск выдаёт 0.

C Уважением, Andir!
Re[2]: Венгерская нотация
От: misha  
Дата: 29.11.02 05:50
Оценка:
Здравствуйте, _grom_, Вы писали:

G>Здравствуйте, Pushkin, Вы писали:


P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще.


G>Я считаю, что такие префиксы могут быть (возможно) полезны в плохо организованном коде написанном несколькими незнакомыми людьми. Мое мнение — префиксы мешают жить. Как тут правильно писалось, в хорошем коде нет надобности во всяких lpszstr. А если тебе не понятно что за хитрая переменная 'lpObjIdontKnowWhatIsIt' то ты все равно полезешь смотреть где она объявлена, заодно и тип посмотришь.


G>P.S. Нет — излишним префиксам!


Ну если с нуля писать хорошо организованный код — то конечно. А через несколько месяцев этот кусок дадут доделать-переделать-исправить ошибки какому нибудь совсем незнакомому человеку. И этот человек будет смотреть на этот замечательный кусок и гадать, а чего это за переменные, строки, числа или какие то собственные классы. Очень раздражает. А если еще не знаешь где искать ошибку, наводить на каждую переменную курсор — увольте. Хочется быстро пробежаться по коду и понять что к чему, а тут двигай мышь, смотри что всплывет, запоминай, забывай, снова двигай. Хотя счетчик в цикле так префексировать конечно не стоит

P.S. Излишним — нет , неизлишним да !!!
Re[6]: Венгерская нотация
От: _Dinosaur Россия  
Дата: 29.11.02 07:32
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>Проблема в том, что у тебя не было умной среды — там курсор наводишь на переменную и всё пронеё видишь.


Я бы не сказал, что делфийская IDE глупее MSVC
Завидую людям, которые могут себе позволить никуда не спешить.
Re[2]: Венгерская нотация
От: McSeem2 США http://www.antigrain.com
Дата: 29.11.02 18:19
Оценка:
Здравствуйте, _grom_, Вы писали:

А если тебе не понятно что за хитрая переменная 'lpObjIdontKnowWhatIsIt' то ты все равно полезешь смотреть где она объявлена, заодно и тип посмотришь.

Неправильное имя. Правильное должно быть lpObjIdontKnowWhatItIs

G>P.S. Нет — излишним префиксам!


Полностью согласен. Вот выдержка из книги Алена Голуба "ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ,
ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ". Книгу можно легко найти по вышеуказанным ключевым словам.

44.1. Не используйте в качестве имен тарабарщину.

Отличный образец такого подхода можно наблюдать в любом предлагаемом Microsoft примере программы, хотя эта проблема ни в коем случае не ограничивается корпорацией Microsoft. Все демонстрационные программы Microsoft Windows включают тип переменной в ее имя. Например, объявление типа:

const char *str;

будет сделано следующим образом:

LPCSTR lpszstr;

Переведите lpszstr как "указатель типа long с именем str на строку, оканчивающуюся 0". На самом деле здесь несколько проблем, не последней из которых является тот факт, что LPCSTR скрывает наше объявление указателя. Тем не менее обсуждаемое правило посвящается проблеме самого имени.

Этот стиль выбора имен называется "венгерской" записью по названию родины руководителя отдела программирования Microsoft Чарльза Саймони, который его изобрел. (А не потому, что его использование придает программам Microsoft такой вид, как будто они написаны на венгерском языке.)

Венгерская запись целесообразна для языка ассемблера, в котором все, что вы знаете о переменной — это ее размер. Включение информации о типе в имя переменной позволяет вам контролировать правильность ее использования. Языки более высокого уровня типа С и С++ используют для этой цели объявление переменных.

Доктор Саймони несколько раз в печати защищал такой метод записи, но я бы не стал его рекомендовать для программ на С или С++. По моему мнению, венгерская запись не дает ничего, кроме ухудшения читаемости программ. Простые str или string значительно легче читаются и содержат ту же информацию. Если вам на самом деле нужно узнать тип, то для этого достаточно вернуться к определению.

Существует и более распространенный, хотя и менее радикальный прием, при котором имена указателей начинают символом p. Эта практика тоже загромождает программу. Вы ведь не начинаете имена целочисленных переменных типа int символом i, переменных типа double — d, а функций — f? Очевидным исключением является случай, когда у вас есть объект и указатель на этот объект в одной и той же области видимости:

char str[128], *pstr = str;

c другой стороны, для указателя, вероятно, лучше содержательное имя. Сравните:

char str[128], *first_nonwhite = str;
while ( isspace(*first_nonwhite) )
++first_nonwhite;
// В этой ситуации имя *first_nonwhite говорит вам гораздо
// больше о том, что делает переменная, чем предыдущее "*pstr".



Ну и потом. Что такое lp? А это "Long Pointer"! Что такое Long Pointer на современном Intel? Это 48-битовый указатель, селектор:смещение. А в Windows префикс lp используется для обычных, 32-битовых указателей, что есть явное вранье. Я понимаю исторические причины, вызвавшие такую несуразность, но от этого не легче — это и есть та самая "тарабарщина".
Далее. Как вы будете использовать венгерскую нотацию для объектов классов? Что, для каждого типа свое сокращение придумывать?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[2]: Венгерская нотация
От: Аноним  
Дата: 29.11.02 18:59
Оценка:
Здравствуйте, dmz, Вы писали:

P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам

dmz>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

Чушь и глупость!

P>>Мне почему-то кажется, что в приходом всевозможных VAssist-ов

P>>реальная необходимость в этом постепенно отмирает. И держится это
dmz>Этой необходимости и не было никогда, при нормальном подходе к кодированию.

А что по твоему "нормальный подход к программированию" — только не надо отвечать в стиле "Почему — читать Васю Пупкина".
Re: Оформление кода: Венгерская нотация
От: Stoune  
Дата: 18.01.03 02:28
Оценка: 21 (1) +1
Здравствуйте, Pushkin, Вы писали:

P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


А ты открой програму в Far-е и попробуй в ней разобраться без помощи визуальных средств, вот тут и поймёш всю глубину "старой школы".
... << RSDN@Home 1.0 beta 4 >>
Re[2]: Оформление кода: Венгерская нотация
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 18.01.03 09:55
Оценка:
Здравствуйте, Stoune, Вы писали:

этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.

S>А ты открой програму в Far-е и попробуй в ней разобраться без помощи визуальных средств, вот тут и поймёш всю глубину "старой школы".


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

P.S. А если серьезно то зачем разбираться в программе в FAR, в VS с Visual Assist-ом с его демонстрацией типа переменной при наведении на нее курсора go to declaration/implementation гораздо удобнее
... << RSDN@Home 1.0 beta 3 >>
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: Оформление кода: Венгерская нотация
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 18.01.03 09:55
Оценка:
Здравствуйте, Pushkin, Вы писали:

P>И держится это всё на программистах "старой школы". Но я совсем не уверен.


Она держится в основном на микрософте, т.к. Wizard-ы делают именно такие декларации. В альтернативных системах ее нет уже давно(если вообще когда то была). Все больше рулит camelNotation (она же java notation). (посмотри java, Qt, Python и тп)

От венгерской реальная польза была в классическом C т.к. там типизация била очень слабой(все помнят что там первое время даже параметры функции не описывались в заголовке), вот там действительно положишь int вместо char и каюк. А в C++ процедура орписаная без параметров больше не означает что в нее можно класть все что угодно. Да и преобразование типов указателей заменено на наследование и безопасные преобразования.
... << RSDN@Home 1.0 beta 3 >>
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: Оформление кода: Венгерская нотация
От: WolfHound  
Дата: 18.01.03 10:07
Оценка:
Здравствуйте, Stoune, Вы писали:

S>А ты открой програму в Far-е и попробуй в ней разобраться без помощи визуальных средств, вот тут и поймёш всю глубину "старой школы".

Имеет смысл только для плохо спроэктированных программ.

Что не понятно в этой функции?
STDMETHODIMP CSRCOMMOPCGroup::AddItems( 
/* [in] */                        DWORD count,
/* [size_is][in] */                OPCITEMDEF *itemArray,
/* [size_is][size_is][out] */    OPCITEMRESULT **addResults,
/* [size_is][size_is][out] */    HRESULT **errors
)
{
    LogPrint(L"IOPCItemMgt::AddItems\n");
    if(m_public)        return OPC_E_PUBLIC;
    if(count<=0)        return E_INVALIDARG;
    if(!itemArray)        return E_INVALIDARG;
    if(!addResults)        return E_INVALIDARG;
    if(!errors)            return E_INVALIDARG;
    *addResults=0;
    *errors=0;
    T_CoAutoArr<HRESULT>        hr(count);
    T_CoAutoArr<OPCITEMRESULT>    ir(count);
    if(!hr||!ir)return E_OUTOFMEMORY;
    UINT fails=0;
    {//Sync
        C_SyncHelper lockDItem(g_DItemSync, C_SyncHelper::StateWrite);
        C_SyncHelper lockThis(this, C_SyncHelper::StateWrite);
        for(UINT i=0;i<count;i++)
        {
            T_CoPtr<COPCGroupItem> p=new COPCGroupItem(this);
            int h=m_Items.Include(p);
            hr[i]=p->Init(&itemArray[i], &ir[i], h);
            if(FAILED(hr[i]))
            {
                fails++;
                m_Items.Exclude(h);
                ir[i].dwAccessRights        =0;
                ir[i].dwBlobSize            =0;
                ir[i].hServer                =g_ItemIndex.end();
                ir[i].pBlob                    =0;
                ir[i].vtCanonicalDataType    =VT_ERROR;
                ir[i].wReserved                =0;
            }
        }
    }
    *addResults=ir.Detach();
    *errors=hr.Detach();
    if(fails)    return S_FALSE;
    else        return S_OK;
}

Это одна из самых больших функций есть больше но там один большой switch.
... << RSDN@Home 1.0 beta 4 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Оформление кода: Венгерская нотация
От: zz-di Россия  
Дата: 18.01.03 10:50
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>Она держится в основном на микрософте, т.к. Wizard-ы делают именно такие декларации. В альтернативных системах ее нет уже давно(если вообще когда то была). Все больше рулит camelNotation (она же java notation). (посмотри java, Qt, Python и тп)


Кстати, вопрос: а почему "camel"?
... << RSDN@Home 1.0 beta 4 >>
Re[3]: Оформление кода: Венгерская нотация
От: Igor Trofimov  
Дата: 18.01.03 11:32
Оценка: 33 (2) :)
потомучтоГорб посерединеПолучается илиДажеДва
Re: Оформление кода: Венгерская нотация
От: Enox Россия http://yuryskaletskiy.blogspot.com/
Дата: 20.01.03 12:43
Оценка: 28 (2)
Хорошо отношусь к любым нормальным нотациям. И даже не совсем из-за с ходу видимой типизации, а вот почему — когда человек держит какую-то модель именования сущностей в голове, он не станет в разных частях системы использовать свежевыдуманные произвольные конструкции типа:

файл а - std::string sMessage;
файл б - std::string MessageString;
файл в - std::string strMsg;


Читать потом всё это действительно неудобно — сбивает внимание на ненужные мелочи, отвлекает от идеи кода.

Для меня использование нотации в контексте проекта — то же самое, что приготовление доумента о терминах и соглашениях на фазе проектирования — некая помогалка выработать единый язык проекта. Сам я часто при переходе от проекта к проекту менял нотации по необходимости, но это мне совершенно не мешало. Время полной адаптауии к новой системе именования — неделя, может две.
--
[R], Enox
Re[3]: Re[3]: Оформление кода: Венгерская нотация
От: Stoune  
Дата: 10.03.03 22:59
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>Здравствуйте, Stoune, Вы писали:



A>P.S. А если серьезно то зачем разбираться в программе в FAR, в VS с Visual Assist-ом с его демонстрацией типа переменной при наведении на нее курсора go to declaration/implementation гораздо удобнее


У меня в архиве разных проектов причём как от 5-ой, так и 6-ой так и 7-ой и даже от BC++5.0 около двух сотен наберётся, так мне что заинсталированые их всех держать прикажеш, а для того чтоб найти одно хорошую функцию (имени не помниш, так што поиск не катит) двух летней давности знаеш сколько ты потратиш времени только на загрузку визуальных средств, и заметь это только твой код, но уже через месяц, ты думаеш кто это писал. Студия у тебя не всегда под руками, а Блокнот, он на любой винде стоит.
... << RSDN@Home 1.0 beta 6a >>
Re[4]: Re[3]: Оформление кода: Венгерская нотация
От: IT Россия linq2db.com
Дата: 11.03.03 00:54
Оценка:
Здравствуйте, Stoune, Вы писали:

S>...знаеш сколько ты потратиш времени только на загрузку визуальных средств, и заметь это только твой код, но уже через месяц, ты думаеш кто это писал.


Потратишь ровно одну секунду. Клац по файлу в фаре, и вот он у тебя уже в тудию загружен. Чего проще?

S>... Студия у тебя не всегда под руками, а Блокнот, он на любой винде стоит.


А зачем тебе код без студии?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Поиск
От: wtom  
Дата: 11.03.03 02:14
Оценка: 12 (2) -3
Здравствуйте, UgN, Вы писали:


UgN>здесь
Автор: Odi$$ey
Дата: 24.09.01


Извините, люди, но раз речь зашла про книжку Алена, то очень хочется сказать (и скажу!) что автор этой книжки — нехороший человек. Единственное, что я у него перенял — разделение функций: //---------, а в остальном... это была наверное единственная книга, от которой меня чуть не стошнило: одни наезды причем на все подряд, и по OLE он там проехался, и по венгерскому соглашению... Ну и читайте распечатки чужого кода страниц на 20 и гадайте что такое это и что такое то.
Не стоит переходить реку вброд, если известно только, что ее глубина (средняя) 4 фута.
Re[3]: Поиск
От: _vovin http://www.pragmatic-architect.com
Дата: 11.03.03 08:34
Оценка: 20 (3) +1 -1
W>
UgN>>здесь
Автор: Odi$$ey
Дата: 24.09.01


W>Извините, люди, но раз речь зашла про книжку Алена, то очень хочется сказать (и скажу!) что автор этой книжки — нехороший человек. Единственное, что я у него перенял — разделение функций: //---------, а в остальном... это была наверное единственная книга, от которой меня чуть не стошнило: одни наезды причем на все подряд, и по OLE он там проехался, и по венгерскому соглашению... Ну и читайте распечатки чужого кода страниц на 20 и гадайте что такое это и что такое то.


Книжка Голуба лежит у меня лет пять, но до сих пор многие моменты до сих пор популярны. Просто кто-то никак не может научиться на собственных ошибках.

Венгерская нотация нарушает одно важное правило, что MS никак не может/не хочет понять — именование в соответствии с назначением, а не реализацией.

Например, мы пишем метод, который что-то сортирует, причем стандартный метод использовать не получается. Мы сами реализуем метод сортировки пузырьком (мало записей) и называем его bubbleSortCustomRecords(). Но потом объемы данных растут, поэтому нам приходится писать quickSortCustomRecords(), в итоге нужно исправлять все места использования предыдущего метода.
В то время как метод sortCustomRecords() избавил бы нас от необходимости знать лишние детали, да упростил изменения.

Так и с венгерской нотацией. Сначала мы добавили m_iPosition (лично меня тошнит от этого m_, смысла ноль, а точнее минус, т.к. соседствует с нарушением инкапсуляции), а потом поняли, что нужна большая точность, в итоге переименовываем в m_dblPosition.
Кроме того, что все объявления типов придется менять, так еще и имена править.

--

Владимир.
Re[3]: Поиск
От: Снорк  
Дата: 11.03.03 12:26
Оценка: 19 (2) +1
Здравствуйте, wtom, Вы писали:

W>Здравствуйте, UgN, Вы писали:


W>

UgN>>здесь
Автор: Odi$$ey
Дата: 24.09.01


W>Извините, люди, но раз речь зашла про книжку Алена, то очень хочется сказать (и скажу!) что автор этой книжки — нехороший человек. Единственное, что я у него перенял — разделение функций: //---------, а в остальном... это была наверное единственная книга, от которой меня чуть не стошнило: одни наезды причем на все подряд, и по OLE он там проехался, и по венгерскому соглашению... Ну и читайте распечатки чужого кода страниц на 20 и гадайте что такое это и что такое то.


Я Пастернака, естественно, не читал, но я скажу.
Горячо согласен с вами, wtom. И вы, и я, видимо, считаем, что код пишется в первую очередь для чтения, а уже во вторую — для компиляции. С этих позиций венгерская нотация очень удобна.

В самом деле: чей код вы видите чаще всего? Разве не мелкософтовый? И разве не они пользовались в.н. везде — от MSDN до сырцов своих DirectX SDK Samples?

Я всегда придерживался венгерской нотации, потому что хотел придать своему коду товарный вид. А это подразумевает лёгкость его чтения. Ну если человек читал (и понимал!) код из MSDN, из samples, то мой код, выглядящий сходным образом, он должен понимать наверняка. Иными словами: следуем за модой, и люди к вам потянутся. Авоськи функциональнее и рациональнее, но в магазин люди ходят с пластиковыми пакетами. Производители авосек в ауте!

Далее, библиотеки (распространяемые в виде сырцов) надо писать придерживаясь какой-то одной нотации, разве нет? И если это будет не венгерская, то какая?

Сейчас же, с переходом на COM и .NET нужда в в.н. действительно отпадает. Попытаюсь сформулировать, почему:
  • Мультиязычная поддержка. Кто любит float, кто single. Как быть?
  • Кому охота видеть ваши свойства в m_-виде? Из другой среды это выглядит ужасно.
  • Имя переменной — сама по себе информация в .NET, и может использоваться по ходу дела. Конечному пользователю видеть, к примеру, "Names" предпочтительнее, чем "m_lpaszNames".

    Несмотря на это, венгерской нотацией по прежнему можно. Послать пасквилянтов с их single, на свойство повесить Get/Set пару, манипулирующую m_-переменной и т.п., но как раз это становится искусственным. Бегом за новой модой!
  • Re[4]: Поиск
    От: wtom  
    Дата: 11.03.03 12:28
    Оценка:
    Здравствуйте, _vovin, Вы писали:


    V>Книжка Голуба лежит у меня лет пять, но до сих пор многие моменты до сих пор популярны. Просто кто-то никак не может научиться на собственных ошибках.


    V>Венгерская нотация нарушает одно важное правило, что MS никак не может/не хочет понять — именование в соответствии с назначением, а не реализацией.


    V>Например, мы пишем метод, который что-то сортирует, причем стандартный метод использовать не получается. Мы сами реализуем метод сортировки пузырьком (мало записей) и называем его bubbleSortCustomRecords(). Но потом объемы данных растут, поэтому нам приходится писать quickSortCustomRecords(), в итоге нужно исправлять все места использования предыдущего метода.

    V>В то время как метод sortCustomRecords() избавил бы нас от необходимости знать лишние детали, да упростил изменения.

    V>Так и с венгерской нотацией. Сначала мы добавили m_iPosition (лично меня тошнит от этого m_, смысла ноль, а точнее минус, т.к. соседствует с нарушением инкапсуляции), а потом поняли, что нужна большая точность, в итоге переименовываем в m_dblPosition.

    V>Кроме того, что все объявления типов придется менять, так еще и имена править.

    V>--


    V>Владимир.



    Как хотите, но _мой_ опыт _мне_ показывает, что легче заменить все m_nPosition, на m_fPosition используя Find&Replace (учитывая еще и то, что при нормальном проектировании это приходится делать крайне редко, чем писать Position, а потом через этак через месяц судорожно листать код в поисках ответа, объект это какого-то класса или указатель на него или целочисленная переменная, или еще что-то. И, например, легче инициализировать структуру из какой-либо билиотеки, если по имени члена сразу можешь определиьть ее тип, чем постоянно переключаться с кода на документацию и обратно. Для ОО языков это тем более усиливается, (разочарую, наверное, человека который в этом топике открыл для себя, почему для ОО языка префиксы теряют смысл) если вы в процессе поиска типа Position где-то наткнетесь на int range = Position — AnotherPosition, это вам абсолютно ни о чем не скажет. Естественно все споры о стиле оформления кода, в основном, бессмысленны, все так говорят, и все спорят. Но я _vovin'a код читать не буду.
    Не стоит переходить реку вброд, если известно только, что ее глубина (средняя) 4 фута.
    Re[2]: Венгерская нотация
    От: Снорк  
    Дата: 11.03.03 12:32
    Оценка:
    Здравствуйте, Рек, Вы писали:

    Рек>printf("%s", a); //рванёт? не знаю. надо знаmь тип а.


    Рек>cout << a; // точно не рванёт.


    С "%s" всё понятно. А с "его возраст — %i лет, его з/п — %.2f$, имя ему — %s" как быть?
    Re[3]: Венгерская нотация
    От: Снорк  
    Дата: 11.03.03 12:41
    Оценка: 24 (2) :)
    Здравствуйте, McSeem2, Вы писали:

    MS>Полностью согласен. Вот выдержка из книги Алена Голуба "ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ,

    MS>ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ". Книгу можно легко найти по вышеуказанным ключевым словам.

    Отличный образец такого подхода можно наблюдать в любом предлагаемом Microsoft примере программы, хотя эта проблема ни в коем случае не ограничивается корпорацией Microsoft. Все демонстрационные программы Microsoft Windows включают тип переменной в ее имя.



    А вот другая выдержка (по памяти):

    (С)Николай Носов.
    — Вот когда полетишь на Луну, — сказали коротышки профессору Звёздочкину, — тогда и будешь выступать на трибуне. А пока посиди здесь, на травке.


    Когда гражданин Голуб будет продвигать свои программы по всему миру так, как это делает MS, тогда его и надо будет читать, как "Отче наш". А пока писать надо в стиле MS. Больше шансов, что ваш код поймут. Если, конечно, вы заинтересованы, чтобы ваш код читали и понимали.
    Re[4]: Венгерская нотация
    От: Lexey Россия  
    Дата: 11.03.03 13:06
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>Когда гражданин Голуб будет продвигать свои программы по всему миру так, как это делает MS, тогда его и надо будет читать, как "Отче наш". А пока писать надо в стиле MS. Больше шансов, что ваш код поймут. Если, конечно, вы заинтересованы, чтобы ваш код читали и понимали.


    Что-то меня в последнее время начинает тошнить от программ, распространяемых MS. Не заметно, чтобы использование венгерской нотации им хоть сколько-нибудь помогало.
    Re[5]: Венгерская нотация
    От: Снорк  
    Дата: 11.03.03 13:17
    Оценка:
    Здравствуйте, Lexey, Вы писали:

    L>Что-то меня в последнее время начинает тошнить от программ, распространяемых MS. Не заметно, чтобы использование венгерской нотации им хоть сколько-нибудь помогало.


    Даже если все мелкомягкие программы — полный отстой с технической точки зрения (что спорно), а их победное распространенение по миру обеспечивалось маркетологами, а не нотациями и прочей программной хренью, смысл сказанного мною не меняется. Какая разница, как они достигли популярности? Главное, что они — законодатели мод.

    Впрочем, они сами отказываются ныне от венгерской нотации. Как тут уже заметили, в GDI+, например.
    Re[3]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 11.03.03 14:44
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>С "%s" всё понятно. А с "его возраст — %i лет, его з/п — %.2f$, имя ему — %s" как быть?


    В форуме по C++ я уже постил класс, который типизированным образом работает с форматной строкой:
    CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f$, имя ему - %s") 
                        << age << зарплата << name;
    ... << RSDN@Home 1.0 beta 6 >>
    Re: Оформление кода: Венгерская нотация
    От: Awaken Украина  
    Дата: 13.03.03 07:58
    Оценка: +1
    >относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов >реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я

    включение информации о типе в имя в языках ООП со строгой типизацией абсолютно бесполезно. если осмысленно выбраны идентификаторы то и так все понятно. существительное — имя сущности(класса). глагол — имя метода.
    для простых типов тоже все понятно что Count должно быть числом а FileName — строкой.
    Re[4]: Re[3]: Венгерская нотация
    От: Снорк  
    Дата: 13.03.03 11:02
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>Здравствуйте, Снорк, Вы писали:


    С>>С "%s" всё понятно. А с "его возраст — %i лет, его з/п — %.2f$, имя ему — %s" как быть?


    DG>В форуме по C++ я уже постил класс, который типизированным образом работает с форматной строкой:

    DG>
    DG>CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f$, имя ему - %s") 
    DG>                    << age << зарплата << name;
    DG>


    Что-то я всё равно недопонимаю. За отсутствием Река, может вы объяснитесь?
    >Короче, тип либо ясен из контектса, либо не важен.
    Чем ваш класс CFormatString безопаснее принтфа? Тем что сомнительной конструкции "..." нет?

    Всё высказывание Река можно, получается, свести к:
  • Конструкция vararg небезопасна.
  • Чтобы она стала безопаснее, можно пользоваться венгеркой (учитывается размер и т.п.)
  • Так же можно написать самовозвращающий объект-поток и вообще её исключить
    Вывод: в ОО системе вегерка не нужна.

    Что понимать под безопасностью? Если не уконтролировать типы, в любом случае получаем ошибку ВРЕМЕНИ ИСПОЛНЕНИЯ!
    Чтобы избежать таких вещей, венгерка по-прежнему нужна!

    Я не сторонник в.н. в современных системах, но аргументацию Река не догоняю.
  • Re[5]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 13.03.03 11:30
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>Что понимать под безопасностью? Если не уконтролировать типы, в любом случае получаем ошибку ВРЕМЕНИ ИСПОЛНЕНИЯ!


    Ошибка времени исполнения бывают разные — одно дело при ошибке исполнения снесло часть стека и запортило кусок памяти, совсем другое дело, если выскочило документированное исключение.

    в первом случае — мы получаем бардак, а во втором случае — детерминированное поведение.

    ошибка в работе с varargs приводит к первому случаю, ошибка в вызове типизированного stream-а или FormatString приводят к детерминированному поведению.

    После возникновения детерминированной ошибки — программа может продолжить/возобновить свою работу, в случае сноса стека — это невозможно.
    ... << RSDN@Home 1.0 beta 6 >>
    Re[6]: Re[3]: Венгерская нотация
    От: Снорк  
    Дата: 13.03.03 12:13
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>Ошибка времени исполнения бывают разные — одно дело при ошибке исполнения снесло часть стека и запортило кусок памяти, совсем другое дело, если выскочило документированное исключение.


    Я так и предполагал, что речь идёт о разных классах ошибок. Хотел даже сразу написать об этом, но поленился.

    Значит без catch нифига работать не будет?
    Так тогда следует писать, по-моему, так: давайте дружно пользоваться исключениями, вместо венгерки — try/catch. Впрочем, так никто и не напишет, потому как абсурдность видна неевооружённым взглядом.

    Вопрос-то по-прежнему стоит: а как быть тем, кто вообще ошибок не хочет? Ни стековых, ни путаницы типов? Им слежение и контроль за типами заменить нечем! Я по-прежнему аргументацию не понимаю.

    Могу согласиться, что Вассисты и глядение в декларацию класса венгерку заменят, но вот что
    >тип либо ясен из контектса, либо не важен
    понять не могу. Одно дело — критерий Лисков, а совем другое вместо принтфа — CStringFormat.

    Нет, я сам считаю, что тип не должен быть важен, но и тут венгерка вполне на месте — указывать базовый класс данной гомоморфной иерархии.
    Re[7]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 13.03.03 12:24
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>понять не могу. Одно дело — критерий Лисков, а совем другое вместо принтфа — CStringFormat.


    ok. Давай разберем поведение CStringFormat-а.
    Все те типы, которые выводятся в printf-е, а это int, float, double, bool, string в StringFormat-е выводятся без рантаймовых ошибок в любом случае! Что не скажешь про printf.
    При этом, как фичу, StringFormat позволяет выводит, какие-то свои типы, здесь уже могут быть рантайм ошибки.
    Ну запрети ты эту фичу, и у тебя получится,
    что при выводе через StringFormat тип знать не надо, и при этом никаких ошибок в runtime-е у тебя не будет, а с printf-ом ты вынужден знать тип параметров, да еще в случаи ошибки все чревато падением программы.
    ... << RSDN@Home 1.0 beta 6 >>
    Re[7]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 13.03.03 12:27
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>Вопрос-то по-прежнему стоит: а как быть тем, кто вообще ошибок не хочет? Ни стековых, ни путаницы типов? Им слежение и контроль за типами заменить нечем! Я по-прежнему аргументацию не понимаю.


    1. При "нормальном" проектировании программы, а такжи при "нормальном" языке (что-то большее, чем C) — рантаймовых ошибок в виде неправильного преобразования типов — не будет.
    printf такому нормальному проектированию мешает.

    2. От рантаймовых ошибок в общем случае ты все равно никуда не денешься: а если деление на ноль? память кончилась? или файла на диске не оказалось?
    ... << RSDN@Home 1.0 beta 6 >>
    Re[8]: Re[3]: Венгерская нотация
    От: Снорк  
    Дата: 13.03.03 12:54
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>ok. Давай разберем поведение CStringFormat-а.

    DG>Все те типы, которые выводятся в printf-е, а это int, float, double, bool, string в StringFormat-е выводятся без рантаймовых ошибок в любом случае! Что не скажешь про printf.

    // В объявлении класса
    CString tax(_T("1000$"));
    // В его методе (другой файл, строка так пятитысячная)
    CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f, имя ему - %s")
    << age << tax << name;


    Разве использование хоть какого-нибудь класса может избавить от такой ошибки? Даже если не вылетит исключение, строка не будет корректно отформатирована, что уже — run-time ошибка. По мне, так лучше принтф, он хоть всё повешает, а некорректную строку можно и в final release пропустить.

    Используя венгерку, получаем strTax / fTax / iTax, что мешает нам написать приведённую выше ерунду.

    Конечно, если глаза не растут из зада и с помощью Вассиста мы отследим такую ошибку, но коим образом правильная ОО-организация заменяет нам венгерку?
    Re[9]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 13.03.03 13:07
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>
    С>// В объявлении класса
    С>CString tax(_T("1000$"));
    С>// В его методе (другой файл, строка так пятитысячная)
    С>CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f, имя ему - %s")
    С><< age << tax << name;
    С>


    С>Разве использование хоть какого-нибудь класса может избавить от такой ошибки?


    Это смотря как ты класс CFormatString напишешь. Можно при несовпадении форматного параметра и типа переданного параметра, писать в Trace.log сообщение, кто тебе мешает?

    С>Даже если не вылетит исключение, строка не будет корректно отформатирована, что уже — run-time ошибка. По мне, так лучше принтф, он хоть всё повешает,


    А вот это уже как повезет... Самое обидное будет, если на твоей машине это работает, неправильный printf испортил не очень важные данные, а у заказчика dump-ит core-у. И что ты с этим будешь делать?

    C> а некорректную строку можно и в final release пропустить.


    Лучше уже в final release пропустить некорректную строку, чем "хрен знает из-за чего падение". А как ты собираешься в большом приложение выяснять какой именно printf уронил всю систему, я не понимаю...

    С>Конечно, если глаза не растут из зада и с помощью Вассиста мы отследим такую ошибку, но коим образом правильная ОО-организация заменяет нам венгерку?


    Дык, все просто — неправильная вывод строки для меня, как заказчика, всегда дешевле, чем падение целой системы.

    зы
    Т.е. априори в системе всегда есть ошибки, так надо просто уменьшить цену их проявления... ОО, а в следствии, этого ненужность венгерки, эту цену уменьшает.
    ... << RSDN@Home 1.0 beta 6 >>
    Re: "Верблюд" vs венгерка?
    От: swamp Россия  
    Дата: 13.03.03 13:09
    Оценка:
    Насколько я понимаю противники венгерской записи предлагают "верблюда" (особенно для C# и проч). Но тут появляется проблема. Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру. Честно говоря я неуверен, что он вообще будет работать (поставить эксперимент что ли )... Поэтому имхо венгерку рано хоронить (по-крайней мере m_xxx и проч....).

    Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...

    А вообще, есть ли другие альтернативы?
    Sincerely yours,
    Andrew Simontsev.
    Re[2]: "Верблюд" vs венгерка?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 13.03.03 13:38
    Оценка:
    Здравствуйте, swamp, Вы писали:

    S>Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру.


    Как ты интересно собрался в VB юзать приватное поле?

    S>Честно говоря я неуверен, что он вообще будет работать (поставить эксперимент что ли )... Поэтому имхо венгерку рано хоронить (по-крайней мере m_xxx и проч....).


    S>Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...


    Ты по моему путаешь венгерку с префиксами вобще. Венгерка это префиксы, отражающие тип переменной. m-xxx и IXxx венгеркой не являются.
    ... << RSDN@Home 1.0 beta 6a >>
    AVK Blog
    Re[10]: Re[3]: Венгерская нотация
    От: small_cat Россия  
    Дата: 13.03.03 14:28
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>Здравствуйте, Снорк, Вы писали:


    С>>
    С>>// В объявлении класса
    С>>CString tax(_T("1000$"));
    С>>// В его методе (другой файл, строка так пятитысячная)
    С>>CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f, имя ему - %s")
    С>><< age << tax << name;
    С>>


    С>>Разве использование хоть какого-нибудь класса может избавить от такой ошибки?


    Вопрос, может, ламерский, но все же...
    Если вы используете std::string (да даже если и не используете), то что вам мешает воспользоваться классом std::ostrstream? Он вроде как специально под это заточен.

    std::ostrstream str;
    str << "его возраст - " << age << " лет, его з/п - " << tax << " имя ему - " << name << '\0';
    std::string myStr = str.str();

    Конечно, есть некие нюансы с использованием манипуляторов потока, иъх просто знать нужно (сиречь, MSDN читать)
    - Простите, профессор, не пса, а когда он уже был человеком.
    — То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
    Re[11]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 13.03.03 14:40
    Оценка: 7 (1)
    Здравствуйте, small_cat, Вы писали:


    SC>Если вы используете std::string (да даже если и не используете), то что вам мешает воспользоваться классом std::ostrstream? Он вроде как специально под это заточен.


    Тем, что форматная строка намного нагляднее, а также проще выносится в ресурсы(внешний файл), например, для локализации.
    ... << RSDN@Home 1.0 beta 6 >>
    Re[10]: Re[3]: Венгерская нотация
    От: Снорк  
    Дата: 13.03.03 14:46
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    В общем-то, я всё для себя уяснил по теме.

    DG>Дык, все просто — неправильная вывод строки для меня, как заказчика, всегда дешевле, чем падение целой системы.


    То есть, резюмируя:

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



    Так пойдёт?
    Re[3]: "Верблюд" vs венгерка?
    От: Снорк  
    Дата: 13.03.03 14:50
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ты по моему путаешь венгерку с префиксами вобще. Венгерка это префиксы, отражающие тип переменной. m-xxx и IXxx венгеркой не являются.


    Это подмножество венгерки.
    Re[4]: "Верблюд" vs венгерка?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 13.03.03 15:47
    Оценка:
    Здравствуйте, Снорк, Вы писали:
    С>Это подмножество венгерки.
    нет
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[12]: Re[3]: Венгерская нотация
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 13.03.03 15:52
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>Тем, что форматная строка намного нагляднее, а также проще выносится в ресурсы(внешний файл), например, для локализации.

    А точнее, является единственным на данный момент способом локализации. Т.к. оная может помимо вординга включать и изменение порядка следования включаемых элементов. В форматной строке это можно сделать без перекомпиляции, а в коде, нанизывающем вызовы операторов — нет.
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[13]: Re[3]: Венгерская нотация
    От: UgN  
    Дата: 13.03.03 16:10
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    DG>>Тем, что форматная строка намного нагляднее, а также проще выносится в ресурсы(внешний файл), например, для локализации.

    S>А точнее, является единственным на данный момент способом локализации. Т.к. оная может помимо вординга включать и изменение порядка следования включаемых элементов. В форматной строке это можно сделать без перекомпиляции, а в коде, нанизывающем вызовы операторов — нет.

    А можно примерчик, а то не соображу как это? %f и %s местами поменять, оставив сами аргументы в старом порядке???

    ЗЫ: Сам пользуюсь подобием в.н. — хуже не будет.
    Re[14]: Re[3]: Венгерская нотация
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 13.03.03 16:37
    Оценка:
    Здравствуйте, UgN, Вы писали:

    UgN>А можно примерчик, а то не соображу как это? %f и %s местами поменять, оставив сами аргументы в старом порядке???


    Оппа! Это, походу, Borland-specific. там можно между процентом и всем остальным вставить индекс, примерно так:
    "Reverted %1:s string goes before the %0:f Float"
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[15]: Re[3]: Венгерская нотация
    От: Frostbitten Россия  
    Дата: 13.03.03 17:10
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    UgN>>А можно примерчик, а то не соображу как это? %f и %s местами поменять, оставив сами аргументы в старом порядке???

    S>Оппа! Это, походу, Borland-specific.

    Нет. И ::FormatMessage() что-то такое тоже умеет.
    Re[5]: "Верблюд" vs венгерка?
    От: Frostbitten Россия  
    Дата: 13.03.03 17:10
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    С>>Это подмножество венгерки.

    S>нет

    Хорошо, тогда сначала. А что тогда есть "венгерка" (т.е. более менее серьезный документ, на который можно было бы ссылаться)?

    P.S.
    Я в @home вижу только новые ветки этой темы (с 11 марта), поэтому прошу прощения если об этом уже писали ранее.
    Re[5]: Венгерская нотация
    От: Micker  
    Дата: 13.03.03 17:15
    Оценка:
    Здравствуйте, Constructor, Вы писали:


    C>В констркуции anObject.instance понятно. А вот в теле функции строчек в 20 и поболее уже не понятно!


    Дак и не зачем такие большие функции плодить.
    Функция должна занимать 5-10 строчек. Так ещё можно контролировать код. А при 30 строчках, ты не в переменных, так в алгоритме ошибёшся. Преффиксы, в данном случае, просто загоняют проблему в даль.....
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[5]: Венгерская нотация
    От: Micker  
    Дата: 13.03.03 17:21
    Оценка:
    Здравствуйте, Pushkin, Вы писали:

    P>А если в нём (языке) вообще как бы и нет типов, то вообще о чём говорить..


    Ну уж нет уж!
    Вспомните префикс m_ — это не от типа, а от области видимости.
    Удалые хлопцы могут и ещё наворотить к имени чёрт знает что...
    Например, вспомните иерархии классов С++ : там префик принято ещё ставить по производителю или автору (если C-то вероятно MFC, если T-то Борлонд и т.д.). А то что для этого есть понятие namespace не все помнят...

    И таких примеров куча!

    Полагаю и в остальных случаях можно без префиксов обойтись...
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[2]: Оформление кода: Венгерская нотация
    От: Frostbitten Россия  
    Дата: 13.03.03 17:46
    Оценка:
    Здравствуйте, Awaken, Вы писали:

    A>включение информации о типе в имя в языках ООП со строгой типизацией абсолютно бесполезно. если осмысленно выбраны идентификаторы то и так все понятно. существительное — имя сущности(класса). глагол — имя метода.


    А атрибуты на "какой" (типа Hiden)? А что за методы OnSomeEvent? Ой не просто поступаться традициями и практическими потребностями — чтобы все обработчики были сгруппированы в одном месте на дереве, отдельно (невперемешку) с, например, объектами синхронизации на eventXXX... ну и lpszPath из тойже из той же серии %).
    Re[2]: "Верблюд" vs венгерка?
    От: _vovin http://www.pragmatic-architect.com
    Дата: 13.03.03 21:37
    Оценка: -1
    S>Насколько я понимаю противники венгерской записи предлагают "верблюда" (особенно для C# и проч). Но тут появляется проблема. Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру. Честно говоря я неуверен, что он вообще будет работать (поставить эксперимент что ли )... Поэтому имхо венгерку рано хоронить (по-крайней мере m_xxx и проч....).

    Если m_ используется снаружи, то это нарушение инкапсуляции.

    Если внутри метода, значит это code smell — большой метод, в котором ничего не понять. На крайний случай можно применять префиксы для параметров — _count, aCount...

    S>Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...


    Из моих проектах она уже давно ретировалась.

    IStream — Streamable
    IPrint — Printable

    S>А вообще, есть ли другие альтернативы?


    Читабельные имена.

    А вообще это не альтернатива, а исправление code smell — вписывание в идентификаторы информации о типе/области видимости, а не ролей.
    Плюс неявный дефект, который сопутствует нотации — плохой дизайн/качество кода.

    --

    Владимир.
    Re[4]: Re[3]: Венгерская нотация
    От: Рома Мик Россия http://romamik.com
    Дата: 13.03.03 23:33
    Оценка:
    Здравствуйте, DarkGray, Вы писали:

    DG>Здравствуйте, Снорк, Вы писали:

    DG>В форуме по C++ я уже постил класс, который типизированным образом работает с форматной строкой:
    DG>
    DG>CString (или std::string) = CFormatString("его возраст - %i лет, его з/п - %.2f$, имя ему - %s") 
    DG>                    << age << зарплата << name;
    DG>

    Непонятно, зачем там сделаны i f и s? Это же дублирование информации о типе параметра, и чего делать если не совпадет, повешать систему как принтф, подставить вместо парамтра слово матом или кинуть исключение, которое никто не поймает?
    А еще не плохо бы в таком классе нумеровать параметры. Иначе преимуществ перед std::ostringstream 0.
    CString (или std::string) = CFormatString("его возраст - {0} лет, его з/п - {1}, имя ему - {2}") << age << std::setprecision(2) << зряплата << name;
    ... << RSDN@Home 1.0 beta 6a >>
    Re[6]: "Верблюд" vs венгерка?
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 14.03.03 08:37
    Оценка: 15 (2)
    F>Хорошо, тогда сначала. А что тогда есть "венгерка" (т.е. более менее серьезный документ, на который можно было бы ссылаться)?
    Здесь
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[6]: Венгерская нотация
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 14.03.03 08:37
    Оценка: 8 (1) +1
    Здравствуйте, Micker, Вы писали:
    M>Удалые хлопцы могут и ещё наворотить к имени чёрт знает что...
    M>Например, вспомните иерархии классов С++ : там префик принято ещё ставить по производителю или автору (если C-то вероятно MFC, если T-то Борлонд и т.д.). А то что для этого есть понятие namespace не все помнят...
    Нет, это не так.
    Обе библиотеки вводят свои coding conventions. Друг к другу эти конвенции не имеют никакого отношения. У борланда префикс T сделан, чтобы отличать вызов класс-методов от вызовов методов объекта и квалификации имени юнита.
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[7]: "Верблюд" vs венгерка?
    От: _vovin http://www.pragmatic-architect.com
    Дата: 14.03.03 09:14
    Оценка:
    F>>Хорошо, тогда сначала. А что тогда есть "венгерка" (т.е. более менее серьезный документ, на который можно было бы ссылаться)?
    S>Здесь

    S>


    Ужасно. Похоже доктор Саймони все еще не поднялся над уровнем ассемблера.

    Если при принятии на работу программиста я вижу такой ужасный стиль, как в его примере, то это означает автоматический отсев. Правда, я думаю, Саймони меня тоже сразу бы отсеял по идеологическим соображениям.

    --

    Владимир.
    Re[8]: "Верблюд" vs венгерка?
    От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
    Дата: 14.03.03 09:26
    Оценка:
    Здравствуйте, _vovin, Вы писали:

    S>>Здесь

    V>Ужасно. Похоже доктор Саймони все еще не поднялся над уровнем ассемблера.

    Выставленные оценки впечатляют. Почти половина поставила 1 из 9, столько же — 9 из 9
    Re[5]: "Верблюд" vs венгерка?
    От: Снорк  
    Дата: 14.03.03 09:39
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Снорк, Вы писали:

    С>>Это подмножество венгерки.
    S>нет

    Coding style conventions are used in this sample series to aid clarity and consistency. The "Hungarian" notation conventions are used..

    Вопрос: как понимать These are often combined, as in: (ниже по тексту).
    Венгерка комбинируется с неким зверем по имени Coding style conventions, или префиксы комбинируются, являясь частью венгерки? Мне кажется, что скорее второе.

    Венгерка зародилась ещё во времена DOS и, по понятным причинам, m_ и IXXX включать в себя первоначально не могла. С этим я согласен. Можно ли считать тот код, который генерирует шестая студия, Win32-версией венгерки, вот в чём вопрос.
    Re[9]: "Верблюд" vs венгерка?
    От: _vovin http://www.pragmatic-architect.com
    Дата: 14.03.03 10:02
    Оценка:
    S>>>Здесь
    V>>Ужасно. Похоже доктор Саймони все еще не поднялся над уровнем ассемблера.

    DG>Выставленные оценки впечатляют. Почти половина поставила 1 из 9, столько же — 9 из 9


    А Саймони идет на rsdn и всем, кто ставил единицу, влепит по нулю. =)

    --

    Владимир.
    Re[5]: Re[3]: Венгерская нотация
    От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
    Дата: 14.03.03 12:58
    Оценка:
    Здравствуйте, Рома Мик, Вы писали:


    РМ>Непонятно, зачем там сделаны i f и s? Это же дублирование информации о типе параметра, и чего делать если не совпадет, повешать систему как принтф, подставить вместо парамтра слово матом или кинуть исключение, которое никто не поймает?


    Это для совместимости с printf-ом. В реальной жизни соответствия типов не проверяются, но, например, встречая %x, CFormatString перерубается в вывод шестнадцатеричный чисел и т.д.

    РМ>А еще не плохо бы в таком классе нумеровать параметры. Иначе преимуществ перед std::ostringstream 0.

    РМ>
    РМ>CString (или std::string) = CFormatString("его возраст - {0} лет, его з/п - {1}, имя ему - {2}") << age << std::setprecision(2) << зряплата << name;
    РМ>


    "std::setprecision(2)" — это уже моветон. Зачем тогда нужна форматная строка?
    хотелось как раз все форматирование выкинуть в саму форматную строку.

    CString (или std::string) = CFormatString("его возраст - {0} лет, его з/п - {1:f2}, имя ему - {2}") 
        << age << зряплата << name;



    ps
    Оба варианта(с процентами и с номерами) CFormatString-а постились в исходниках в виде идеи в форуме c++. Можешь поискать.
    ... << RSDN@Home 1.0 beta 6 >>
    Re[6]: Венгерская нотация
    От: _wqwa США  
    Дата: 15.03.03 11:25
    Оценка:
    Здравствуйте, Micker, Вы писали:

    M>Здравствуйте, Constructor, Вы писали:


    M>

    C>>В констркуции anObject.instance понятно. А вот в теле функции строчек в 20 и поболее уже не понятно!

    M>Дак и не зачем такие большие функции плодить.

    M>Функция должна занимать 5-10 строчек. Так ещё можно контролировать код. А при 30 строчках, ты не в переменных, так в алгоритме ошибёшся. Преффиксы, в данном случае, просто загоняют проблему в даль.....

    Сомнительно...
    Если заниматься постоянно функциональной декомпозицией методов, то когда же проект сдавать?
    Или понятие сроков в природе остсутствует?
    RSDN@Home
    Кто здесь?!
    Re[3]: "Верблюд" vs венгерка?
    От: swamp Россия  
    Дата: 15.03.03 13:44
    Оценка:
    Здравствуйте, _vovin, Вы писали:

    S>>Насколько я понимаю противники венгерской записи предлагают "верблюда" (особенно для C# и проч). Но тут появляется проблема. Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру. Честно говоря я неуверен, что он вообще будет работать (поставить эксперимент что ли )... Поэтому имхо венгерку рано хоронить (по-крайней мере m_xxx и проч....).


    V>Если m_ используется снаружи, то это нарушение инкапсуляции.


    Например поле protected и я наследуюсь от этого класса. Поле становится для меня (писателя класса-наследника) видимым.

    V>Если внутри метода, значит это code smell — большой метод, в котором ничего не понять. На крайний случай можно применять префиксы для параметров — _count, aCount...


    Хм... А чем параметры принципиально отличаются от обычных переменных (с точки зрения смысла алгоритма)?

    S>>Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...

    V>Из моих проектах она уже давно ретировалась.

    V>IStream — Streamable

    V>IPrint — Printable

    Пишем COM компонент. Добавляем ко-класс, ну например, Bitmap. Интерфейс обзывает Bitmapable?

    S>>А вообще, есть ли другие альтернативы?

    V>Читабельные имена.

    Читабельными они должны быть вне зависимости от нотации...

    V>А вообще это не альтернатива, а исправление code smell — вписывание в идентификаторы информации о типе/области видимости, а не ролей.


    Все-таки не понимаю, чем это мешает. Если название переменной не MyCoolVariable или чего хуже xx12, то читабельность нисколько не портится.

    V>Плюс неявный дефект, который сопутствует нотации — плохой дизайн/качество кода.


    Какая связь между дизайном и нотацией?
    Sincerely yours,
    Andrew Simontsev.
    Re[3]: "Верблюд" vs венгерка?
    От: swamp Россия  
    Дата: 15.03.03 14:06
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, swamp, Вы писали:


    S>>Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру.


    AVK>Как ты интересно собрался в VB юзать приватное поле?


    Приватное никак (ну или может через рефлексию ), а protected — запросто. Например унаследовавшись от этого класса.

    S>>Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...


    AVK>Ты по моему путаешь венгерку с префиксами вобще. Венгерка это префиксы, отражающие тип переменной. m-xxx и IXxx венгеркой не являются.


    Да? Я вообще полагал, что венгерская нотация — это такой подход к именованию идентификаторов, который подразумевает использование префиксов (неважно для какой цели). В MSDN есть technical article под названием Hungarian Notation. Вот оттуда выдержка:

    A note from Dr. GUI: Long, long ago in the early days of DOS, Microsoft's Chief Architect Dr. Charles Simonyi introduced an identifier naming convention that adds a prefix to the identifier name to indicate the functional type of the identifier.

    This system became widely used inside Microsoft. It came to be known as "Hungarian notation" because the prefixes make the variable names look a bit as though they're written in some non-English language and because Simonyi is originally from Hungary.


    То есть слово "Венгерская" здесь от того, что мы делаем название непохожим на обычный язык, т.е. пользуемся префиксами и т.п...

    Впрочем неважно. Важна проблема — как разрулить ситуацию, когда в одном месте есть несколько идентификаторов, которые должны называться одинаково (с точки зрения смысла программы). Эта ситуация может быть не только при вышеописанной ситуации. Например параметры конструктора:

    SomeClass(int count)
    {
    m_count = count;
    }

    Как сделать без префиксов? Не называть же параметр countOfSomeClass
    Sincerely yours,
    Andrew Simontsev.
    Re[4]: "Верблюд" vs венгерка?
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 15.03.03 17:22
    Оценка:
    Здравствуйте, swamp, Вы писали:

    AVK>>Ты по моему путаешь венгерку с префиксами вобще. Венгерка это префиксы, отражающие тип переменной. m-xxx и IXxx венгеркой не являются.


    S> Да? Я вообще полагал, что венгерская нотация — это такой подход к именованию идентификаторов, который подразумевает использование префиксов (неважно для какой цели). В MSDN есть technical article под названием Hungarian Notation. Вот оттуда выдержка:


    S>

    S>A note from Dr. GUI: Long, long ago in the early days of DOS, Microsoft's Chief Architect Dr. Charles Simonyi introduced an identifier naming convention that adds a prefix to the identifier name to indicate the functional type of the identifier.


    Обрати внимание на выделенное.
    ... << RSDN@Home 1.0 beta 6 (np: тихо) >>
    AVK Blog
    Re[4]: "Верблюд" vs венгерка?
    От: WFrag США  
    Дата: 16.03.03 03:10
    Оценка:
    Здравствуйте, swamp, Вы писали:


    S>SomeClass(int count)

    S>{
    S> m_count = count;
    S>}

    S> Как сделать без префиксов? Не называть же параметр countOfSomeClass


    А вот так (Java):
    SomeClass( int count )
    {
        this.count = count;
    }
    ... << RSDN@Home 1.0 beta 6a >>
    Re[7]: Венгерская нотация
    От: WolfHound  
    Дата: 16.03.03 04:54
    Оценка: 14 (1)
    Здравствуйте, _wqwa, Вы писали:

    W>Сомнительно...

    Напрасно.
    W>Если заниматься постоянно функциональной декомпозицией методов, то когда же проект сдавать?
    W>Или понятие сроков в природе остсутствует?
    Если ты не будешь этим заниматься то проект будет писаться на порядок дольше. Просто по тому что отладить 10 маленьких проще чем одну большую и в большой проще совершить ошибку.
    ... << RSDN@Home 1.0 beta 5 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[8]: Венгерская нотация
    От: _wqwa США  
    Дата: 16.03.03 12:18
    Оценка:
    Здравствуйте, WolfHound, Вы писали:


    WH>Если ты не будешь этим заниматься то проект будет писаться на порядок дольше. Просто по тому что отладить 10 маленьких проще чем одну большую и в большой проще совершить ошибку.


    Ну хорошо. Вот если тебе не сложно, загляни в свои проект и скажи, сколько строчек занимает самая большая функция, и сколько -- в среднем.
    RSDN@Home
    Кто здесь?!
    Re[2]: Венгерская нотация
    От: deploy  
    Дата: 16.03.03 13:16
    Оценка:
    Здравствуйте, dmz, Вы писали:

    P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам

    dmz>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.
    Венгерскую нотацию — давить. Полностью согласен с dmz.
    ... << RSDN@Home 1.0 beta 6a >>
    Re[9]: Венгерская нотация
    От: WolfHound  
    Дата: 16.03.03 15:25
    Оценка:
    Здравствуйте, _wqwa, Вы писали:

    W>Ну хорошо. Вот если тебе не сложно, загляни в свои проект и скажи, сколько строчек занимает самая большая функция, и сколько -- в среднем.

    Смотрю мой COM сервер примерно треть 1-3 строки, треть 5-10 строк, остальное имплементация интерфейсов(проверка входных параметров, проверка состояния обьекта, выделение памяти...короче набегает а главное не разделить ) 15-30 строк за редким исключением в ту и другую сторону. Правда есть несколько монстров 60-120 но там switch кототый можно разве что разнести по отдельным case'ам но я решил что куски кода и так достаточно разделены и не стал извращаться.
    ... << RSDN@Home 1.0 beta 5 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[4]: "Верблюд" vs венгерка?
    От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
    Дата: 17.03.03 09:42
    Оценка:
    Здравствуйте, swamp, Вы писали:

    V>>Если m_ используется снаружи, то это нарушение инкапсуляции.

    S> Например поле protected и я наследуюсь от этого класса. Поле становится для меня (писателя класса-наследника) видимым.

    Тоже нарушение инкапсуляции — наследник может быть в другой компоненте.

    Do not use instance fields that are public or protected (Public or Protected in Visual Basic). If you avoid exposing fields directly to the developer, classes can be versioned more easily because a field cannot be changed to a property while maintaining binary compatibility. Consider providing get and set property accessors for fields instead of making them public.

    Re[7]: Венгерская нотация
    От: Micker  
    Дата: 17.03.03 13:39
    Оценка:
    Здравствуйте, _wqwa, Вы писали:

    W>Здравствуйте, Micker, Вы писали:


    M>>Здравствуйте, Constructor, Вы писали:


    M>>

    C>>>В констркуции anObject.instance понятно. А вот в теле функции строчек в 20 и поболее уже не понятно!

    M>>Дак и не зачем такие большие функции плодить.

    M>>Функция должна занимать 5-10 строчек. Так ещё можно контролировать код. А при 30 строчках, ты не в переменных, так в алгоритме ошибёшся. Преффиксы, в данном случае, просто загоняют проблему в даль.....

    W>Сомнительно...

    W>Если заниматься постоянно функциональной декомпозицией методов, то когда же проект сдавать?
    W>Или понятие сроков в природе остсутствует?

    А как вы считаете, какое соотношение времени на проектирование и на кодирование нормалное? 1:100 ?
    Вы из тех кто рвётся в бой — покодируем-покодируем, потом ошибочки поищем? потом бросим и перекодируем?
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[7]: Венгерская нотация
    От: Micker  
    Дата: 17.03.03 13:41
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Micker, Вы писали:

    M>>Удалые хлопцы могут и ещё наворотить к имени чёрт знает что...
    M>>Например, вспомните иерархии классов С++ : там префик принято ещё ставить по производителю или автору (если C-то вероятно MFC, если T-то Борлонд и т.д.). А то что для этого есть понятие namespace не все помнят...
    S>Нет, это не так.
    S>Обе библиотеки вводят свои coding conventions. Друг к другу эти конвенции не имеют никакого отношения. У борланда префикс T сделан, чтобы отличать вызов класс-методов от вызовов методов объекта и квалификации имени юнита.

    Ну и это правильно? Зачем вообщем-то это необходимо различать? Вспомните Страуструпа, глава "Роли классов", можно Элджера почитать...
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[8]: Венгерская нотация
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 18.03.03 06:30
    Оценка: 26 (3)
    Здравствуйте, Micker, Вы писали:

    M>Ну и это правильно? Зачем вообщем-то это необходимо различать? Вспомните Страуструпа, глава "Роли классов", можно Элджера почитать...

    А можно вспомнить, что VCL написана на Паскале, и осознать ограничения применимости Страуструпа и Элджера.
    Ребята, "просто так" ничего не бывает.
    Все конвенции кодирования призваны улучшить читаемость кода человеком при помощи предоставления подсказок о семантике элементов. Часть семантики обеспечивается синтаксисом конкретного языка, и в таких случаях изобретение избыточных конвенций — это членоудлинительство.
    В Паскале есть некоторые семантические неопределенности, которые затрудняют чтение программ. Для их разрешения были придуманы конвенции VCL. Префиксы имен классов, приватных полей, традиция называть обработчики On* и.т.д. — это все сделано именно для этого.
    В CBuilder часть этих конвенций перекочевала вместе с VCL. Использование их там является не намного меньшим бредом, чем использование венгерки в плюсах или жабе.
    Ну, CBuilder — это вообще выдающийся пример теоремы Стеклова. Не надо смешивать водку и пиво, хотя по отдельности оба напитка просто великолепны.

    З.Ы. Для справки: теорема Стеклова из квантовой механики формулируется так: "Коммутатор операторов спиртных напитков с различной крепостью отличен от нуля". Из этого, в частности, следует принципиальная неизмеримость одновременно каждого из воздействий, например, пива и водки.
    ... << RSDN@Home 1.0 beta 6 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[4]: "Верблюд" vs венгерка?
    От: _vovin http://www.pragmatic-architect.com
    Дата: 18.03.03 07:47
    Оценка: 35 (3)
    Здравствуйте, swamp, Вы писали:

    S>>>Насколько я понимаю противники венгерской записи предлагают "верблюда" (особенно для C# и проч). Но тут появляется проблема. Допустим я пишу объект на C# в котором есть проперти Count. Как мне обозвать поле класса, которое его представляет? Насколько я понимаю count. Однако когда мы этот класс начнем юзать в VB.NET, мы поимеем проблемы — он нечувствителен к регистру. Честно говоря я неуверен, что он вообще будет работать (поставить эксперимент что ли )... Поэтому имхо венгерку рано хоронить (по-крайней мере m_xxx и проч....).


    V>>Если m_ используется снаружи, то это нарушение инкапсуляции.


    S> Например поле protected и я наследуюсь от этого класса. Поле становится для меня (писателя класса-наследника) видимым.


    Кстати говоря, наследование, это единственный приемлемый и официально одобренный способ нарушения инкапсуляции.
    Поэтому сильно увлекать им, все-таки, не стоит.
    Но даже в это случае, непонятно, зачем может понадобится префикс m_. Если исходя из назначения класса и вида метода (например, не вмещается на один экран) непонятно, где находится переменная и что она делает, то это проблема дизайна.


    V>>Если внутри метода, значит это code smell — большой метод, в котором ничего не понять. На крайний случай можно применять префиксы для параметров — _count, aCount...


    S> Хм... А чем параметры принципиально отличаются от обычных переменных (с точки зрения смысла алгоритма)?


    Непринципиально. Это для тех, кому хочется быстро различать параметры и все остальное.

    S>>>Ну и еще одна вещь, где венгерка не собирается отступать — объявления интерфейсов (Ixxx)...

    V>>Из моих проектах она уже давно ретировалась.

    V>>IStream — Streamable

    V>>IPrint — Printable

    S> Пишем COM компонент. Добавляем ко-класс, ну например, Bitmap. Интерфейс обзывает Bitmapable?


    Это smell модели COM-а.
    В нем приходится заводить интерфейс, одноименный классу. Было бы логичнее назвать его именно Bitmap, а остальные интерфейсы, которые "подмешиваются" к другим классам, называть с окончанием -able.

    S>>>А вообще, есть ли другие альтернативы?

    V>>Читабельные имена.

    S> Читабельными они должны быть вне зависимости от нотации...


    При этом именно такая нотация становится излишней и даже вредной.

    V>>А вообще это не альтернатива, а исправление code smell — вписывание в идентификаторы информации о типе/области видимости, а не ролей.


    S> Все-таки не понимаю, чем это мешает. Если название переменной не MyCoolVariable или чего хуже xx12, то читабельность нисколько не портится.


    Когда я вижу у своих программистов подобный идентификатор (который говорит о структуру, но не о назначении), я спрашиваю, попробуй сказать мне, для чего он предназначен одним предложением. После этого прошу сократить фразу до одного-трех слов. Таким образом, m_tabFirst привращается в DetailsTab, m_paneUpper в SearchPane и т.д.

    V>>Плюс неявный дефект, который сопутствует нотации — плохой дизайн/качество кода.


    S> Какая связь между дизайном и нотацией?


    Наличие венгерской нотации может оправдываться плохим дизайном. Хороший дизайн может исключить излишнюю нотацию.

    --

    Владимир.
    Re[9]: Венгерская нотация
    От: Micker  
    Дата: 18.03.03 08:14
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>А можно вспомнить, что VCL написана на Паскале, и осознать ограничения применимости Страуструпа и Элджера.


    Сорри, Не совсем в курсе о теме спора: что такое VCL я не знаю, а на Паскале ничего профессионально не писал.

    Склоняюсь к мысли, что в некоторых языках нотация типа Венгерки применима, даже помогает.
    Но при этом, в С++ всегда можно обойтись без неё. С++ достаточно могущ и в нём есть средства, которые позволяют делать код чистым и прозрачным не прибегая к его загрязнению различными префиксами, суффиксами и нафиксами. Я уверен, что верная декомпозиция позволяет писать функции "умещающиеся на ладошкее". А применение нотаций делает код более жестким для изменения.


    Возможно, что исключением станет пример функции со switch/case"ами. Но это тема отдельного спора. Полагаю, что при верном дизайне можно избавится от этого наследия C путем применения паттерна Command или Visitor. Хотя не стану утверждать, что это всегда возможно...

    S>Ребята, "просто так" ничего не бывает.


    Точно! Историческая совместимость с какими-то старыми вещами — дела благородное, но не дешовое. И если нотация пришла в С++ от Паскали (в какой-нить библиотеке), то это и есть расплата, за эту совместимость...

    S>Все конвенции кодирования призваны улучшить читаемость кода человеком при помощи предоставления подсказок о семантике элементов.


    Безусловно, ученик у которго есть шпаргалка, лучше напишет конторльную,
    но ученик который понимает тему способен на получения больших результатов!

    S> ... членоудлинительство.


    Ну Вы и загнули!
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[6]: Венгерская нотация
    От: Micker  
    Дата: 18.03.03 08:34
    Оценка:
    Здравствуйте, Снорк, Вы писали:


    С> Главное, что они — законодатели мод.


    Это уже вопрос не по форуму: Орлом летать или Ужом ползать?

    С>Впрочем, они сами отказываются ныне от венгерской нотации. Как тут уже заметили, в GDI+, например.

    Здравая идея! Самих небось заколебало код корявый писать....
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[9]: Венгерская нотация
    От: Lexey Россия  
    Дата: 18.03.03 11:39
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>З.Ы. Для справки: теорема Стеклова из квантовой механики формулируется так: "Коммутатор операторов спиртных напитков с различной крепостью отличен от нуля". Из этого, в частности, следует принципиальная неизмеримость одновременно каждого из воздействий, например, пива и водки.




    Это в юмор надо.
    Re[8]: Венгерская нотация
    От: _wqwa США  
    Дата: 19.03.03 22:44
    Оценка:
    Здравствуйте, Micker, Вы писали:

    M>>>Дак и не зачем такие большие функции плодить.

    M>>>Функция должна занимать 5-10 строчек. Так ещё можно контролировать код. А при 30 строчках, ты не в переменных, так в алгоритме ошибёшся. Преффиксы, в данном случае, просто загоняют проблему в даль.....

    W>>Сомнительно...

    W>>Если заниматься постоянно функциональной декомпозицией методов, то когда же проект сдавать?
    W>>Или понятие сроков в природе остсутствует?

    M>А как вы считаете, какое соотношение времени на проектирование и на кодирование нормалное? 1:100 ?

    M>Вы из тех кто рвётся в бой — покодируем-покодируем, потом ошибочки поищем? потом бросим и перекодируем?

    Ну зачем так сразу и так резко?
    Все мы читали Брукса, Гамму, Страуструпа и т.д.
    Все мы имеем некий (пусть и очень небольшой -- в моем случае --) опыт.

    Просто я считаю (пока что!) неоправданным проектировать систему от нуля сразу до мельчайших мелочей (вроде типа переменной-счетчика в цикле второй степени вложенности во внутренней функции модулявизуализации отчета).
    RSDN@Home
    Кто здесь?!
    Re[7]: Венгерская нотация
    От: Снорк  
    Дата: 20.03.03 11:23
    Оценка: :)
    Здравствуйте, Micker, Вы писали:

    M>Это уже вопрос не по форуму: Орлом летать или Ужом ползать?


    А вот по форуму: писать понятный для абстрактного большинства программмистов код — это по вашему орлом летать или ужом ползать?

    С>>Впрочем, они сами отказываются ныне от венгерской нотации. Как тут уже заметили, в GDI+, например.

    M>Здравая идея! Самих небось заколебало код корявый писать....

    Наверное, так и решили за кружкой чая: заколебало! Коряво как-то получается...
    Re[9]: Венгерская нотация
    От: Micker  
    Дата: 21.03.03 10:15
    Оценка:
    Здравствуйте, _wqwa, Вы писали:

    Ну нельзя, нельзя окинуть одним взглядом всю вселенную!
    Ну не возможно отличать спутники Юпитера от Луны по префиксам!

    W>Ну зачем так сразу и так резко?

    W>Все мы читали Брукса, Гамму, Страуструпа и т.д.
    W>Все мы имеем некий (пусть и очень небольшой -- в моем случае --) опыт.

    Я уверен, ты и Буча читал! А у него есть цитатка на какого-то психолога: мол больше пяти-семи объектов одновременно человек не может брать во внимание: память его небезгранична.
    И отсюда вытекает мораль: структура программного кода должна быть такой, что бы в поле зрения программиста на данном уровне рассмотрения было не более скольки-то важных элементов.

    W>Просто я считаю (пока что!) неоправданным проектировать систему от нуля сразу до мельчайших мелочей (вроде типа переменной-счетчика в цикле второй степени вложенности во внутренней функции модулявизуализации отчета).


    Иногда меня просто радует, насколько близки мнения спорящих.
    Ведь мы с тобой говорим об одном и том же!
    Для этого, как ты знаешь, есть итеративный подходю

    Слов нет, проектирование цикла (n+5)-той вложенности, наверное, (я сам не знаю) маразм.
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[8]: Венгерская нотация
    От: Micker  
    Дата: 21.03.03 10:19
    Оценка:
    Здравствуйте, Снорк, Вы писали:

    С>А вот по форуму: писать понятный для абстрактного большинства программмистов код — это по вашему орлом летать или ужом ползать?


    Смотря из каких соображений это делать: из-за того что "так делает Вася", или из-за того что "так делает Вася и я считаю что это правильно".

    С>Наверное, так и решили за кружкой чая: заколебало! Коряво как-то получается...


    Американцы чай редко пьют...
    Видать не они это решили!
    Жизнь, как игра —
    идея паршивая,
    графика обалденная...
    Re[10]: Венгерская нотация
    От: _wqwa США  
    Дата: 25.03.03 12:45
    Оценка:
    Здравствуйте, Micker, Вы писали:

    M>Я уверен, ты и Буча читал! А у него есть цитатка на какого-то психолога: мол больше пяти-семи объектов одновременно человек не может брать во внимание: память его небезгранична.

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

    Ага, о семи элементах я и хотел сказать.

    M>Иногда меня просто радует, насколько близки мнения спорящих.

    M>Ведь мы с тобой говорим об одном и том же!
    Тогда будем считать эту часть спора закомпостированной.
    RSDN@Home
    Кто здесь?!
    Re[9]: Венгерская нотация
    От: Снорк  
    Дата: 26.03.03 06:41
    Оценка:
    Здравствуйте, Micker, Вы писали:

    M>Смотря из каких соображений это делать: из-за того что "так делает Вася", или из-за того что "так делает Вася и я считаю что это правильно".


    Вася != Microsoft.
    Re[10]: Венгерская нотация
    От: WolfHound  
    Дата: 26.03.03 18:26
    Оценка: 2 (1) +1
    Здравствуйте, Снорк, Вы писали:

    С>Вася != Microsoft.

    Microsoft!=Идеал.
    ... << RSDN@Home 1.0 beta 5 >>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Re[5]: Re[3]: Оформление кода: Венгерская нотация
    От: Stoune  
    Дата: 07.05.03 22:29
    Оценка:
    Здравствуйте, IT, Вы писали:

    IT>Здравствуйте, Stoune, Вы писали:


    S>>...знаеш сколько ты потратиш времени только на загрузку визуальных средств, и заметь это только твой код, но уже через месяц, ты думаеш кто это писал.


    IT>Потратишь ровно одну секунду. Клац по файлу в фаре, и вот он у тебя уже в тудию загружен. Чего проще?


    S>>... Студия у тебя не всегда под руками, а Блокнот, он на любой винде стоит.


    IT>А зачем тебе код без студии?


    Зачем, а хотя бы так, в 6-ой студии я реализовал свой хитрый тулбар, причём в проэкте 2-х летней давности, а тулбар был только в промежуточной версии проэкта, в какой не помню, самих архивов версий проэкта не меньше 30, даже приблизительно зная в какой версии этот тулбар находится, я значительно больше времени бы потратил времени на загрузку проэкта в студию, его конвертацию в формат 7-ой, а так фаром зашол в архив F4 и посмотрел файлик, один второй, вот и нашол.
    ... << RSDN@Home 1.0 beta 6a >>
    Re[5]: "Верблюд" vs венгерка?
    От: Аноним  
    Дата: 08.05.03 07:20
    Оценка:
    Здравствуйте, WFrag, Вы писали:

    S>SomeClass(int count)

    S>{
    S> m_count = count;
    S>}

    S> Как сделать без префиксов? Не называть же параметр countOfSomeClass


    WF>А вот так (Java):

    WF>
    WF>SomeClass( int count )
    WF>{
    WF>    this.count = count;
    WF>}
    WF>


    А еще лучше так:

    SomeClass(int count)
    {
    this.count = param.count;
    }

    И запретить обращаться к нелокальным переменным без явного
    указания области видимости.
    Отсутствие конфликтов будет гарантировано языком.
    Re: Оформление кода: Венгерская нотация
    От: VuDZ Россия  
    Дата: 25.09.03 23:41
    Оценка:
    Здравствуйте, Pushkin, Вы писали:

    P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


    Ну, в общем, имхо, всё зависит от того, что ты пишешь.
    У меня в библиотеке куча защищённых переменных типа theWindowsMap, theWindow и пр., венгерка используется только для декларирования публичных свойств...

    На счёт VA — главное — понимание того, с чем ты работает — я тут пару дней посидел под соляркой с nc и ничего, не сказал бы, что знание типа переменно через префиксы сильно помагает... Главное, имхо — понимание того, что делает конкретная ф-ия/поле...
    ... << RSDN@Home 1.1 beta 2 >>
    Re[2]: Венгерская нотация
    От: Joker6413  
    Дата: 26.09.03 07:12
    Оценка:
    Здравствуйте, dmz, Вы писали:

    P>>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам

    dmz>Венгерскую нотацию — давить. Почему — читать Голуба. Который Аллен.

    А кто он такой? Что выдающегося сделал?

    P>>Мне почему-то кажется, что в приходом всевозможных VAssist-ов

    P>>реальная необходимость в этом постепенно отмирает. И держится это
    dmz>Этой необходимости и не было никогда, при нормальном подходе к кодированию.

    А 1-3 (не больше) символьные префиксы значительно увеличивают читабельность кода, это факт!
    Re[4]: Венгерская нотация
    От: al Россия  
    Дата: 17.10.03 16:14
    Оценка: :)
    Здравствуйте, _Dinosaur, Вы писали:

    _D>У меня не раз VA ставил раком MSVC и винды.


    MSVC и без всякого VA может сама раком встать и Windows так-же поставить


    Re: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 18.10.03 23:59
    Оценка: 3 (1)
    Здравствуйте, Pushkin, Вы писали:

    P>Раз тут развернулось обсуждение префиксов, хотелось бы узнать, как сейчас прогрессивная общественность относится к сабжу и к префиксам вообще. Мне почему-то кажется, что в приходом всевозможных VAssist-ов реальная необходимость в этом постепенно отмирает. И держится это всё на программистах "старой школы". Но я совсем не уверен.


    Венгерская нотация была и остается эффективной при использовании с языком С. Дело в том, что в С нет строгого контроля типов. При использовании префиксов соостветвующих типам, многие ошибки связанные с несовместимостью типов становятся очевидными.

    С++ — язык со строгой типизацией (в чем состоит одно из его главных отличий от С). Там префиксы обозначающие типы бесполезны, т. к. компилятор в состоянии отловить эти ошибки. Но при этом, по нашему опыту, все-таки целесообразно использовать префиксы обозначающие область видимости:

    m_ данные класса
    s_ статические данные класса
    g_ глобальные переменные

    i_ input-параметр функции
    o_ output-параметр функции
    io_ in-out параметр функции.
    без префикса — локальные переменные.

    Еще нужен префикс p для указателей: например, m_pAggregationByPointer. Этот префикс не так важен, как предыдущие, но если к нему привык, то почему-то сильно напрягает его отсутствие. Просто бесит, я бы сказал. Поэтому мы его ставим всегда.

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

    Некоторые используют префикс b для bool. Наличие или отсутствие этого префикса как показывает практика не принципиально, но мне, например, нравится когда он есть. Так красиво.

    Итак, зачем нужны эти префиксы: они очень помогают разбираться с чужим (или хорошо забытым своим) кодом во время отладки и ревер-инжиниринга, поскольку сокращают количество метаний по коду. Насчет VA: штука хорошая и нужная, но префиксы она не отменяет — цветов не хватит. Хотя конечно VA сильно помогает, когда префиксов нет. Также, мне кажется, префикс различить проще чем цветовой оттенок, а еще проще и то и другое сразу.

    Аргументация против обычно такая:
    класс должен быть компактен и понятен, чтобы программер знал наизусть какая переменная член класса, а какая нет. Функция должна быть короткая, чтобы было очевидно, что является входным параметром, а что нет. Глобальных переменных не должно быть

    Все здорово, пока этих классов у вас мало, и размер системы небольшой. Но как только кода становиться больше, в команде становится больше людей, и с момента написания кода прошло много времени — программист уже ничего не помнит и далеко не все понимает, и тут уже не важно, какого размера ваши классы и функции. Использовать такие префиксы — акт вежливости по отношению к другим, такой же как давать идентификаторам осмысленные имена и комментировать запутанные места.

    Например, я исправляю дефект, найденный клиентом. В отладчике я проваливаюсь (или возвращаюсь вверх по стеку) в очередную функцию. Я хочу видеть сразу, здесь и сейчас, не глядя в header, и не глядя на сигнатуру функции, какая переменная локальная, какая параметр, а какая член класса. При глубине стека 5-7 функций в малознакомом коде большого объема я уже этого не запоминаю (есть проблемы поважнее), и у меня просто нет времени постоянно лазить по header-ам за всякой ерундой.

    А что до того, что функции должны быть маленькими , то они имеют тенденцию неотвратимо расти. Вставил кто-то, например, отладочную печать — багу поймать. Кто-то другой добавил две строки — расширил функционал. При этом все знают, что функции должны быть маленькими, но в реальной жизни они почему-то слишком часто бывают большими, чтобы игнорировать этот факт.
    Re[2]: Оформление кода: Венгерская нотация
    От: Lexey Россия  
    Дата: 20.10.03 11:38
    Оценка: +1
    Здравствуйте, Gaperton, Вы писали:

    G>i_ input-параметр функции

    G>o_ output-параметр функции
    G>io_ in-out параметр функции.

    Ага, познакомился недавно с таким стилем именования. Впечатление — это чистое замусоревание имен переменных ни несущее почти никакой смысловой нагрузки.

    P.S. Против других префиксов ничего сильно против не имею.
    Re[3]: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 20.10.03 15:28
    Оценка:
    Здравствуйте, Lexey, Вы писали:

    L>Здравствуйте, Gaperton, Вы писали:


    G>>i_ input-параметр функции

    G>>o_ output-параметр функции
    G>>io_ in-out параметр функции.

    L>Ага, познакомился недавно с таким стилем именования. Впечатление — это чистое замусоревание имен переменных ни несущее почти никакой смысловой нагрузки.


    Вот простейший пример — одна из ситуаций, когда это помогает. Допустим мы ловим багу в малознакомом (чужом, и/или хорошо забытом) коде.

    void SomeClass::SetTimeRange( TimeRange i_exclusiveTimeRange )
    {
    // legacy code...
    
       TimeRange inclusiveTimeRange = i_exclusiveTimeRange;
       inclusiveTimeRange.SetEndTime( i_exclusiveTimeRange.GetEndTime() - oneMinute );
    
    // legacy code...
    
       doSomething( inclusiveTimeRange );
    
    // legacy code...
    
       doSomethingElse( i_exclusiveTimeRange );
    }


    Мы остановились в брекпойнте в функции doSomethingElse. Понимаем, что ошибка вызвана неправильным значением входного параметра. Выходим в отладчике из функции doSomethingElse обратно в функцию SetTimeRange. Первая строчка, на которой останавливается взгляд, это doSomethingElse( i_exclusiveTimeRange ). Глядя на префикс параметра понимаем, что нам не надо смотреть по коду, как вычисляется i_exclusiveTimeRange, т. к. это входной параметр. Спокойно идем выше по стеку.

    В той же ситуации для функции doSomething мы сразу видим, что мы должны сделать поиск вверх по коду с целью разобраться, как формируется inclusiveTimeRange.

    Для того, чтобы поймать реальную багу, часто надо просмотреть сотни функций, написанных и подправленных разными людьми, двигаясь по стеку на глубину более 7 вызовов.

    Ну вот и получается, что в нашей конторе тем кто не ставит эти префиксы — отрывают руки. Так уж у нас в лесу заведено. И не манагеры (это даже не является официальным код-стандартом), а свои-же братья-программеры. Вы все еще кипятите? А мы уже рубим.
    Re[4]: Оформление кода: Венгерская нотация
    От: Lexey Россия  
    Дата: 20.10.03 15:40
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    G>Мы остановились в брекпойнте в функции doSomethingElse. Понимаем, что ошибка вызвана неправильным значением входного параметра. Выходим в отладчике из функции doSomethingElse обратно в функцию SetTimeRange. Первая строчка, на которой останавливается взгляд, это doSomethingElse( i_exclusiveTimeRange ). Глядя на префикс параметра понимаем, что нам не надо смотреть по коду, как вычисляется i_exclusiveTimeRange, т. к. это входной параметр. Спокойно идем выше по стеку.


    При нормальных размерах функии входные параметры легко отличаются от локальных переменных визуально без всяких префиксов.
    Re[5]: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 20.10.03 16:37
    Оценка:
    Здравствуйте, Lexey, Вы писали:

    L>Здравствуйте, Gaperton, Вы писали:


    G>>Мы остановились в брекпойнте в функции doSomethingElse. Понимаем, что ошибка вызвана неправильным значением входного параметра. Выходим в отладчике из функции doSomethingElse обратно в функцию SetTimeRange. Первая строчка, на которой останавливается взгляд, это doSomethingElse( i_exclusiveTimeRange ). Глядя на префикс параметра понимаем, что нам не надо смотреть по коду, как вычисляется i_exclusiveTimeRange, т. к. это входной параметр. Спокойно идем выше по стеку.


    L>При нормальных размерах функии входные параметры легко отличаются от локальных переменных визуально без всяких префиксов.


    Как у вас просто все.

    Напоминаю, что "для того, чтобы поймать реальную багу, часто надо просмотреть сотни функций, написанных и подправленных разными людьми, двигаясь по стеку на глубину более 7 вызовов." Добавлю, что это занимает от 3 дней до 2 недель. Код размером мегов так 50. С кодом ты знаком слабо. "Пробовал-ли ты? А ты попробуй!"

    И посмотрим, как тебе помогут "нормальные размеры". Кстати, а "нормальные" это сколько? 5, 10, 50, 100, 200? А ты уверен, что все программисты одинаково понимают понятие "нормальные размеры"? И ты сам не грешен, никогда не писал "ненормально" длинных функций? Да? Не верю. Потому что один и тот же программер в разных ситуациях придерживается разного мнения о том, что такое нормальные размеры.

    Идеализм это, имхо, сами знаете какой. Нормальные программы из реальной жизни пишутся не одним человеком, пишутся часто в спешке, а потом (!) продолжительное время поддерживаются, модифицируются, подкручиваются, итд. Все знают, что функции должны быть короткими. Я обеими руками за. И хотя все "за", в реальной жизни они часто почему-то не получаются короткими (и никто тут не виноват — жизнь такая), а рефакторинг часто просто экономически не оправдан.
    Re[6]: Оформление кода: Венгерская нотация
    От: Lexey Россия  
    Дата: 20.10.03 16:54
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    L>>При нормальных размерах функии входные параметры легко отличаются от локальных переменных визуально без всяких префиксов.


    G>Как у вас просто все.


    Ну да, а зачем себе и другим жизнь усложнять?

    G>Напоминаю, что "для того, чтобы поймать реальную багу, часто надо просмотреть сотни функций, написанных и подправленных разными людьми, двигаясь по стеку на глубину более 7 вызовов." Добавлю, что это занимает от 3 дней до 2 недель. Код размером мегов так 50. С

    >кодом ты знаком слабо. "Пробовал-ли ты? А ты попробуй!"

    Таких баг мне еще ни разу ни ловить, ни видеть не приходилось, впрочем как и видеть такие уровни вложенности. Максимум — уровня 4-5. И ловилось все отсилы за пару часов без каких-то диких трассировок стека. Гораздо большие проблемы обыно составляет исправление.
    И размер под 50 мегов тут особой роли не играет — это же не один модуль.

    G>И посмотрим, как тебе помогут "нормальные размеры". Кстати, а "нормальные" это сколько? 5, 10, 50, 100, 200? А ты уверен, что все


    Да в общем-то нормально помогают. По крайней мере никогда не видел нужды в каких-либо префиксах (даже в стандартной венгерке).
    Нормальные по моим меркам — строк до 30-40.

    >программисты одинаково понимают понятие "нормальные размеры"? И ты сам не грешен, никогда не писал "ненормально" длинных функций? Да?


    Писал, но таких функций обычно одна на несколько десятков, поэтому особых проблем они не доставляют.

    >Не верю. Потому что один и тот же программер в разных ситуациях придерживается разного мнения о том, что такое нормальные размеры.


    G>Идеализм это, имхо, сами знаете какой. Нормальные программы из реальной жизни пишутся не одним человеком, пишутся часто в спешке, а

    >потом (!) продолжительное время поддерживаются, модифицируются, подкручиваются, итд. Все знают, что функции должны быть короткими. Я обеими руками за. И хотя все "за", в реальной жизни они часто почему-то не получаются короткими (и никто тут не виноват — жизнь такая), а рефакторинг часто просто экономически не оправдан.

    Как будто я этого не знаю.
    Re[7]: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 20.10.03 17:59
    Оценка:
    Здравствуйте, Lexey, Вы писали:

    G>>Как у вас просто все.


    L>Ну да, а зачем себе и другим жизнь усложнять?

    Согласен, это действительно ни к чему.

    L>Таких баг мне еще ни разу ни ловить, ни видеть не приходилось, впрочем как и видеть такие уровни вложенности.

    О, у нас их гнездо. Мечта любого баголова-любителя .

    L>Максимум — уровня 4-5. И ловилось все отсилы за пару часов без каких-то диких трассировок стека. Гораздо большие проблемы обыно составляет исправление.

    L>И размер под 50 мегов тут особой роли не играет — это же не один модуль.

    Ну, , вообще-то один. Хотя это действительно роли не играет. Играет роль, что ты (например) в коде очень плохо разбираешься. И поэтому в процессе идентификации ошибки тебе попутно приходится делать reverse-engineering. А код старый, большой и страшный.

    G>>И посмотрим, как тебе помогут "нормальные размеры". Кстати, а "нормальные" это сколько? 5, 10, 50, 100, 200? А ты уверен, что все

    L>Да в общем-то нормально помогают. По крайней мере никогда не видел нужды в каких-либо префиксах (даже в стандартной венгерке).
    L>Нормальные по моим меркам — строк до 30-40.
    Значит твой код настолько хорош, что его не портит наличие/отсутствие префиксов. Такое бывает.

    Повезло. Кроме шуток, тебе действительно повезло. Потому что код, на котором очевидно преимущество префиксов, это ужас, летящий на крыльях ночи. Это жвачка, прилипшая к твоему ботинку. Это труп, поддерживающий видимость жизни усилиями злых чорных магов-программистов. Это великий и ужасный LEGACY CODE.

    Встреча с ним никого не оставляет равнодушным и меняет людей навсегда. Им уже никогда не стать другими. В общем, приходите к нам на работу. У нас замечательный компенсационный пакет и все такое
    Re[8]: Оформление кода: Венгерская нотация
    От: Lexey Россия  
    Дата: 21.10.03 08:45
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    L>>Таких баг мне еще ни разу ни ловить, ни видеть не приходилось, впрочем как и видеть такие уровни вложенности.

    G>О, у нас их гнездо. Мечта любого баголова-любителя .

    Предпочитаю все-таки свои писать, чем чужие ловить.

    L>>И размер под 50 мегов тут особой роли не играет — это же не один модуль.


    G>Ну, , вообще-то один. Хотя это действительно роли не играет. Играет роль, что ты (например) в коде очень плохо


    8-( ). Что же это за зверь такой?

    разбираешься. И поэтому в процессе идентификации ошибки тебе попутно приходится делать reverse-engineering. А код старый, большой и страшный.


    G>>>И посмотрим, как тебе помогут "нормальные размеры". Кстати, а "нормальные" это сколько? 5, 10, 50, 100, 200? А ты уверен, что все

    L>>Да в общем-то нормально помогают. По крайней мере никогда не видел нужды в каких-либо префиксах (даже в стандартной венгерке).
    L>>Нормальные по моим меркам — строк до 30-40.
    G>Значит твой код настолько хорош, что его не портит наличие/отсутствие префиксов. Такое бывает.

    Может быть.

    G>Повезло. Кроме шуток, тебе действительно повезло. Потому что код, на котором очевидно преимущество префиксов, это ужас, летящий на крыльях ночи. Это жвачка, прилипшая к твоему ботинку. Это труп, поддерживающий видимость жизни усилиями злых чорных магов-программистов. Это великий и ужасный LEGACY CODE.


    Ну, в общем-то, наверное и с таким кодом приходилось иметь дело. Причем написанным на VB. Песец действительно полный, к счастью он все-таки был модульным и размеры были всего порядка мега.

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


    Да нет, мне и у себя пока радостей хватает.
    Re[5]: Венгерская нотация
    От: gwg-605 Россия  
    Дата: 21.10.03 08:53
    Оценка:
    _D>>У меня не раз VA ставил раком MSVC и винды.

    al>MSVC и без всякого VA может сама раком встать и Windows так-же поставить


    А может не MSVC раком ставит, а та прога которую пишешь?
    Re[8]: Венгерская нотация
    От: gwg-605 Россия  
    Дата: 21.10.03 09:10
    Оценка: +1
    WH>Если ты не будешь этим заниматься то проект будет писаться на порядок дольше. Просто по тому что отладить 10 маленьких проще чем одну большую и в большой проще совершить ошибку.

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

    И еще пара минусов: а) производительность, б) отладка (если ошибка произошла на низком уровне иерархии вызовов).

    А вообще есть замечательное правило: золотой середины, и ненадо бросаться в крайности

    Удачи,
    Valery.
    Re[8]: Оформление кода: Венгерская нотация
    От: Sinclair Россия https://github.com/evilguest/
    Дата: 21.10.03 10:52
    Оценка:
    Здравствуйте, Gaperton, Вы писали:

    G>Повезло. Кроме шуток, тебе действительно повезло. Потому что код, на котором очевидно преимущество префиксов, это ужас, летящий на крыльях ночи. Это жвачка, прилипшая к твоему ботинку. Это труп, поддерживающий видимость жизни усилиями злых чорных магов-программистов. Это великий и ужасный LEGACY CODE.

    Хм. Я боюсь, что на примере старого и ужасного кода видны только его недостатки: он стар и ужасен. Или ты предлагаешь вносить венгерские префиксы в Старый и Ужасный код? Или ты думаешь, что использование префиксов экономически оправдано при написании Старого и Ужасного кода? Я думаю, что экономически оправдано написание Нового и Красивого кода, а в нем почему-то преимущества венгерских префиксов не видно.
    Надежда на то, что благодарные потомки вознесут тебе оды за венгерку при том, что на качество кода ты просто забил, сродни надежде продать дерьмо, ежели его поперчить как следует.
    ... << RSDN@Home 1.1 beta 2 >>
    Уйдемте отсюда, Румата! У вас слишком богатые погреба.
    Re[9]: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 21.10.03 21:44
    Оценка: +1
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Gaperton, Вы писали:


    S>Хм. Я боюсь, что на примере старого и ужасного кода видны только его недостатки: он стар и ужасен.

    Во первых, на примере старого и ужастного кода можно много чему научится. Особенно если вспомнить, что его писали люди, которые думали что пишут Новый и Красивый код.

    А во вторых, я говорил не "видны", а очевидны. "Очевидно" — это значит понятно без дополнительных раздумий, объяснений и оговорок. А не "понятно" вообще.
    "...код, на котором очевидно преимущество префиксов..." не означает что речь идет о единствнном примере где видны преимущества префиксов.

    S> Или ты предлагаешь вносить венгерские префиксы в Старый и Ужасный код?

    Нет.

    S> Или ты думаешь, что использование префиксов экономически оправдано при написании Старого и Ужасного кода? Я думаю, что экономически оправдано написание Нового и Красивого кода, а в нем почему-то преимущества венгерских префиксов не видно.


    Во первых, речь идет не о венгерских префиксах. Почитай вверх по ветке.

    Во вторых, конечно-же, написание Нового и Красивого кода не всегда экономически оправдано. Написание коммерческого софта это всегда компромисс между (1) качеством, (2) бюджетом, (3) функционалом. Причем приоритеты диктуются потребностями бизнеса, а не желанием программера. Слепое предпочтение качеству без принятия в расчет остальных факторов способно убить проект. И тогда не из чего (да и не за что) будет тебе платить зарплату, несмотря на то, что ты написал Новый и Очень Красивый код.

    Любой коммерчески успешный продукт — это всегда инженерный компромисс. А тебе наверно кажется, что единственная причина по который пишется Старый и Ужасный код, это когда кто-то "на качество кода просто забил"? Да нет, он появляется сам собой потому, что всегда есть более приоритетные задачи, и менее приоритетные. И времени всегда не хватает. И потому что начальство не дает работать ради Красивого Кода (и правильно делает — это бизнес, а не НИИ). И потому, что все очень умные поодиночке программисты не склонны до конца разбираються в очень красивом коде друг друга, когда его изменяют.

    А также потому, что не все программисты являются гуру в области дизайна и технологий, и иногда ошибаются. И это правильно, — на ошибках они учатся, и это шанс стать гуру. Но вот код за ними никто не выбрасывает, он доводится серией клуджей до стабильного состояния и идет в релиз. А потом поддерживается. Почему? Да потому что это дешевле чем выбрасывать.

    Во третьих, кому это "не видно"? Мне вот, например, видно преимущество префиксов на любом С++ коде — новом, старом, красивом, страшном. И не только мне, я знаю очень много людей, кто разделяет мое мнение. Ну и что с того?

    S>Надежда на то, что благодарные потомки вознесут тебе оды за венгеркупри том, что на качество кода ты просто забил, сродни надежде продать дерьмо, ежели его поперчить как следует.


    Звучит, как будто я призываю всех просто забить на качество кода, потому что за использование венгерки нам обещано отпущение всех грехов. Аминь! Правильно, так меня, мракобеса, по лбу, простой и доступной аналогией с перченым дерьмом.
    Re[4]: Оформление кода: Венгерская нотация
    От: Vladimir_K  
    Дата: 22.10.03 13:21
    Оценка:
    Здравствуйте, Gaperton, Вы писали:


    G>Вот простейший пример — одна из ситуаций, когда это помогает. Допустим мы ловим багу в малознакомом (чужом, и/или хорошо забытом) коде.


    G>
    G>void SomeClass::SetTimeRange( TimeRange i_exclusiveTimeRange )
    G>{
    G>// legacy code...
    
    G>   TimeRange inclusiveTimeRange = i_exclusiveTimeRange;
    G>   inclusiveTimeRange.SetEndTime( i_exclusiveTimeRange.GetEndTime() - oneMinute );
    
    G>// legacy code...
    
    G>   doSomething( inclusiveTimeRange );
    
    G>// legacy code...
    
    G>   doSomethingElse( i_exclusiveTimeRange );
    G>}
    G>


    G>Мы остановились в брекпойнте в функции doSomethingElse. Понимаем, что ошибка вызвана неправильным значением входного параметра. Выходим в отладчике из функции doSomethingElse обратно в функцию SetTimeRange. Первая строчка, на которой останавливается взгляд, это doSomethingElse( i_exclusiveTimeRange ). Глядя на префикс параметра понимаем, что нам не надо смотреть по коду, как вычисляется i_exclusiveTimeRange, т. к. это входной параметр.


    Позволю себе маленький вопрос. Последнее утверждение подразумевает, что входные параметры не модифицируются в теле функции. Есть ли гарантии, что весь legacy code написан с соблюдением этого правила? И почему бы тогда в описание формального параметра
    не добавить const? (ну, два вопроса... )
    Re[5]: Оформление кода: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 22.10.03 15:39
    Оценка:
    Здравствуйте, Vladimir_K, Вы писали:

    V_K>Здравствуйте, Gaperton, Вы писали:



    G>>Вот простейший пример — одна из ситуаций, когда это помогает. Допустим мы ловим багу в малознакомом (чужом, и/или хорошо забытом) коде.


    G>>
    G>>void SomeClass::SetTimeRange( TimeRange i_exclusiveTimeRange )
    G>>{
    G>>}
    G>>


    G>>Мы остановились в брекпойнте в функции doSomethingElse. Понимаем, что ошибка вызвана неправильным значением входного параметра. Выходим в отладчике из функции doSomethingElse обратно в функцию SetTimeRange. Первая строчка, на которой останавливается взгляд, это doSomethingElse( i_exclusiveTimeRange ). Глядя на префикс параметра понимаем, что нам не надо смотреть по коду, как вычисляется i_exclusiveTimeRange, т. к. это входной параметр.


    V_K>Позволю себе маленький вопрос. Последнее утверждение подразумевает, что входные параметры не модифицируются в теле функции. Есть ли гарантии, что весь legacy code написан с соблюдением этого правила?

    Гарантий — никаких, есть надежда . Слава богу у нас это случается не часто (хотя было разок на моей памяти). Все-таки древние программисты были по большей части гуманны, и у них рука не поворачивалась модифицировать переменную с префиксом i_.

    V_K> И почему бы тогда в описание формального параметра

    V_K>не добавить const? (ну, два вопроса... )
    Чорт. Вообще надо-бы, по уму-то если.
    Re[3]: Венгерская нотация
    От: Gaperton http://gaperton.livejournal.com
    Дата: 22.10.03 17:46
    Оценка:
    Здравствуйте, McSeem2, Вы писали:

    MS>

    MS>Венгерская запись целесообразна для языка ассемблера, в котором все, что вы знаете о переменной — это ее размер. Включение информации о типе в имя переменной позволяет вам контролировать правильность ее использования. Языки более высокого уровня типа С и С++ используют для этой цели объявление переменных.


    При всем уважении к господину Голубу (мне очень нравится его книга), тут он не совсем прав.

    Единственное внятное и разумное определение "уровня языка" для императивных языков я видел в книжке про архитектуру "Эльбрус-3". Архитектура заточена под эффективное выполнение программ на языках высокого уровня, поэтому им требовалось определение уровня языка. У них было интересное исследование на эту тему ("Они" — это Бабаян и компания). По результатам они постановили, что уровень языка определяется это развитостью его системы типов, и ничем больше.

    Язык С с его слабым на грани отсутствия контролем типов — это язык низкого уровня (то же их вывод), вроде макроассемблера, только переносимый. Вывод подтверждается практикой его применения, — сейчас он используется для тех задач, для которых ранее традиционно применялся ассемблер. Голуб ошибается, ровняя С с С++. Соответственно, и дальнейшая его аргументация применительно к языку С весьма спорная.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.