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 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.