Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> указатели и хендлы, как без венгерской нотации 
:(
    Опции темы
0x07L
Дата 7.7.2006, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: нет
Всего: 5



Я уже несколько раз читал, что венгерская нотация - это плохо. Но как без нее называть переменные-указатели и хендлы? Неужели дописывать к имени переменной Pointer или Handle? И вообще, стоит ли отказываться от венгерской нотации, если за это приходиться расплачиваться необычайной пестротой кода, когда используешь библиотеки типа MFC, располагающие своими собственными правилами именования переменных?  

Это сообщение отредактировал(а) 0x07L - 8.7.2006, 09:17
PM MAIL   Вверх
maxim1000
Дата 7.7.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



тут есть некоторые мысли о венгерской нотации:
http://www.joelonsoftware.com/articles/Wrong.html
раньше там, по-моему, была ссылка на русский перевод, но сейчас что-то не нашёл... 


--------------------
qqq
PM WWW   Вверх
Fazil6
Дата 7.7.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Но как без нее называть переменные-указатели и хендлы? Неужели дописывать к имени переменной Pointer или Handle?
 как хочешь - так и называй. 
PM MAIL   Вверх
0x07L
Дата 8.7.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 10.6.2006
Где: Москва

Репутация: нет
Всего: 5



Ага, ясно. Плоха не сама венгерская нотация, а ее интерпретация от Micro$oft. Значит, не стоит полностью отказываться от венгерской нотации и можно использовать ее там, где это нужно. Я, как всегда, все не так понял.

А второй вопрос я, пожалуй, уберу. С ним как-нибудь разберусь сам.

maxim1000, спасибо за ссылочку. 

Это сообщение отредактировал(а) 0x07L - 8.7.2006, 09:19
PM MAIL   Вверх
Farik
Дата 26.7.2006, 14:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 1.2.2005

Репутация: нет
Всего: 1



Цитата

тут есть некоторые мысли о венгерской нотации:
http://www.joelonsoftware.com/articles/Wrong.html
раньше там, по-моему, была ссылка на русский перевод, но сейчас что-то не нашёл... 

http://local.joelonsoftware.com/mediawiki/...еть_неправильно

Цитата

Плоха не сама венгерская нотация, а ее интерпретация от Micro$oft.


Венгерская нотация и есть изобретение одного из работников микрософта. Плоха неправильно понятая венгерская нотация.
И как раз на эту плохую венгерку и гонит 90% рунета.

Вот собственно документ первоначальный.
http://msdn.microsoft.com/library/default..../hunganotat.asp


Вобщем лучше чем у Джоела это нигде не описано. 
PM MAIL   Вверх
Mayk
Дата 26.7.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Farik @  26.7.2006,  18:43 Найти цитируемый пост)
Вот собственно документ первоначальный.
http://msdn.microsoft.com/library/default..../hunganotat.asp

smile
Код

#include "sy.h"
extern int *rgwDic;
extern int bsyMac;
struct SY *PsySz(char sz[])
{
     char *pch;
     int cch;
     struct SY *psy, *PsyCreate();
     int *pbsy;
     int cwSz;
     unsigned wHash=0;
     pch=sz;
     while (*pch!=0
        wHash=(wHash<>11+*pch++;
    cch=pch-sz;
....

WTF!
 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
FTTA
Дата 29.8.2013, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 25.10.2011

Репутация: нет
Всего: нет



И все же, стоит ли использовать Венгерскую нотацию?
PM MAIL   Вверх
akizelokro
Дата 3.9.2013, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



А чёрт её знает..
Насколько я помню, она появилась из-за того, что вдруг появилось в Винде куча классов всего, что надо было запоминать (но что не являлось частью стандарта языка, HWND и прочее, например). Притом, вспомни, какая морока была писать, а ещё паче разбираться, например, на Сшкном APIшнике. Вот сейчас смотрел SumatraPDF и вспомнил, какой это финиш.

Насколько я помню, часть венгерской нотации ставила требования к оформлению названий функций, притом, часть из них же относилась к тому, чтобы сначала неявно указывать в названии тип. А сейчас тебе в оболочке тип просто будет показан в той же Студии при наведении. Так что в этом необходимость отпадает. Мир не стоит на месте, что-то остаётся, что-то уходит.
Но в своё время венгерка помогла сэкономить определенное количество времени и дать какую-то стандартизацию


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
bsa
Дата 3.9.2013, 10:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(FTTA @  29.8.2013,  23:26 Найти цитируемый пост)
И все же, стоит ли использовать Венгерскую нотацию? 
Мне в свое время понравилось одно объяснение, зачем она была изначально придумана (в МС ее несколько видоизменили). Например, ты пишешь вэб приложение. Пользователь вводит на страничке какую-то информацию, а ты на ее основе формируешь запрос. Все мы знаем, что есть такой метод взлома как SQL-injection. Так вот, чтобы не допустить его, необходимо все поступаемые данные от пользователя (unsafe) делать безопасными (safe). А данные поступающие из БД преобразовывать к вменяемому виду. Поэтому, пишется две функции: string safeFromUnsafe(string) и string unsafeFromSafe(string). В итоге, когда ты их используешь то выглядит это так: string safeQuery = safeFromUnsafe(unsafeQuery). Слева от From идут все "safe", а справа "unsafe". Если вдруг, после рефакторинга что-то поменяется, то сразу же бросится в глаза.
А вот так выглядит "привычная" форма: string safeQuery = unsafeToSafe(unsafeQuery). Очевидно, что она менее наглядна и интуитивна.

Вот в этом и заключается исходный смысл Венгерской нотации. А не в дописывании приставки обозначающей тип переменной.
PM   Вверх
baldina
Дата 5.9.2013, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



внеязыковые средства должны прояснять то, что требует пояснения, но языка не хватает
низкоуровневые типы как таковые к этому имхо не относятся
PM MAIL   Вверх
ТарасАтавин
Дата 7.9.2013, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



0x07L, зачем вообще что то дописывать? 
Код
HWND WindowMain;
 ни чем не хуже, чем 
Код
HWND hwndWindowMain;
. Венгерская нотация предназначена для сред программирования, к которых нельзя быстро проверить тип переменной по её декларации и приходится включать его в имя. В первую очередь при программировании на языке ассемблера. Просто для того, чтоб не забыть размер и формат данных.

Добавлено через 10 минут и 35 секунд
Цитата(bsa @  3.9.2013,  10:47 Найти цитируемый пост)
Все мы знаем, что есть такой метод взлома как SQL-injection. Так вот, чтобы не допустить его, необходимо все поступаемые данные от пользователя (unsafe) делать безопасными (safe). А данные поступающие из БД преобразовывать к вменяемому виду. Поэтому, пишется две функции: string safeFromUnsafe(string) и string unsafeFromSafe(string). 
А какое это имеет отношение к венгерской нотации, согласно которой в имя включается информация о типе? Это обычные смысловые имена, отражающие назначение, их к тому же отлично можно заменить на Code/deCode.

Добавлено через 13 минут и 15 секунд
Цитата(bsa @  3.9.2013,  10:47 Найти цитируемый пост)

А вот так выглядит "привычная" форма: string safeQuery = unsafeToSafe(unsafeQuery). Очевидно, что она менее наглядна и интуитивна.
Очевидно, что интутивность здесь и при прочих равных то совпадает, а при условии привычности её здесь даже больше.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
bsa
Дата 9.9.2013, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(ТарасАтавин @  7.9.2013,  09:19 Найти цитируемый пост)
А какое это имеет отношение к венгерской нотации, согласно которой в имя включается информация о типе?
Цитата(bsa @  3.9.2013,  11:47 Найти цитируемый пост)
Мне в свое время понравилось одно объяснение, зачем она была изначально придумана (в МС ее несколько видоизменили).
Еще раз для тех кто в танке, Венгерская нотация придумана для указания вида (не типа) хранимых данных в переменной. А в МС переиначили и получилось, что они стали приписывать тип переменной вместо вида хранимых данных.

PM   Вверх
JoKe
Дата 10.9.2013, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.9.2011

Репутация: нет
Всего: нет



не стоит использовать такую нотацию. это вырвиглазие.
PM MAIL   Вверх
Alca
Дата 10.9.2013, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

не стоит использовать такую нотацию. это вырвиглазие.

особенно если "сложный" тип


--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 10.9.2013, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Alca @  10.9.2013,  11:51 Найти цитируемый пост)
особенно если "сложный" тип 

Ага. Вот например - http://msdn.microsoft.com/en-us/library/aa915440.aspx
А теперь представь, что эта структура входит в другую. Представь, как будет выглядеть код:
Код

struct DXParams {
    DDSURFACEDESC ddsfdescPrimarySurfaceDesc;
};
DXParams dxParams;
dxParams.ddsfdescPrimarySurfaceDesc.ddckCKDestOverlay.dwColorSpaceHighValue = 42; // <------- УЖОС



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0921 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.