Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > Старая новая венгерская нотация


Автор: Alix 15.10.2007, 17:49
Гуляя нашел такую статью http://local.joelonsoftware.com/mediawiki/index.php/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B5%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE от дядьки Joel'a. 
Очень неплохого, кстати дядьки и статьи у него всегда интересные.

Но суть не в этом. В предложенной им статье показывается что существует две Венгерских нотации - Прикладная и Системная. Первая появилась раньше и была "правильной", вторая позже и является той, которую мы имеем в виду говоря про эту нотацию. А суть такова, что в прикладной нотации предлагается давать переменным префиксы, которые отражали бы содержимое переменных, а не их ТИП, как это делается в системной нотации. Кроме того, префиксирование касается не только переменных, но и имен функций. И даже их именований, как например, стандартное TypeToType рекомендуется заменить на TypeFromType, т.к. тип результата при таком раскладе будет находиться слева, что ближе к присваиванию и потому более понятно.
В статье приводится пара интересных примеров. И в конце несколько мутная добавка про обработку исключений.

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

Скажите, что вы об этом думаете? Используете ли вы префиксы в именовании переменных?
если не в тот форум, направьте меня на путь истинный

Автор: setq 16.10.2007, 10:14
Интересная статья. Спасибо.

Автор: __kish 17.10.2007, 13:00
Было многабукв, здохли два раза - после возврата из предварительного просмотра и открытия смайликов (IE 6.0)

Вкратце - все зависит от:
  • языка программирования - ООП языки, хоть и не радуют автора статьи своей (кажущейся) сложностью, однако способны избавить от методов длинной несколько страниц, разгрузить проблемы архитектурой - складывая i+j вам не нужно знать как это работает если это работает, печать также может быть определена и все это только начало smile
  • библиотек - Qt не использует префиксы, Symbian - своя система;
  • контекста - суть кода должна быть ясна.

Я использую C++ с ООП, паттернами и рефакторингом:
  • m_ для полей класса;
  • без префикса для полей структуры;
  • i, dw, lpcstr - не использую - многабукв;
  • код должын быть понятен без комментариев;
  • работа в команде - работа с единым подходом.

Автор: Shaggie 17.10.2007, 13:16
Цитата(__kish @  17.10.2007,  14:00 Найти цитируемый пост)
код должын быть понятен без комментариев

Рекомендую пересмотреть эту точку зрения, на ней далеко не уехать.

Автор: Afonya 17.10.2007, 14:45
Не осилил. ИМХО, обе великих венгерских нотации - суета-сует и томленья духа. smile

Shaggie
Рекомендую пересмотреть эту точку зрения, на ней далеко не уехать.
Don't comment obvious. Если нужны комментарии, это повод задуматься, почему код недостаточно понятен.

__kish
m_ для полей класса
Абсолютно, ИМХО, бессмысленное и малопродуктивное занятие.

ООП языки, хоть и не радуют автора статьи своей (кажущейся) сложностью, однако способны избавить от методов длинной несколько страниц
ИМХО никакой такой связи между ООП, классическим процедурным программированием и методами длинной в несколько страниц нет.

код должын быть понятен без комментариев
Абсолютно с вами согласен.

Автор: Shaggie 17.10.2007, 15:07
Цитата(Afonya @  17.10.2007,  15:45 Найти цитируемый пост)
Если нужны комментарии, это повод задуматься, почему код недостаточно понятен.

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

Комментарии помогут за пять секунд узнать, что делает конкретный метод. Не как - это видно из кода, но что. Общая картина складывается быстрее. Дебажил когда-нибудь чужой код? Сваянный тремя программерами последовательно и ещё двумя параллельно?

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

Комментарии есть часть технической документации на программное обеспечение.

С помощью комментариев можно писать аннотации (кто знает Java - меня поймёт).

Короче говоря комментарии - это могучий инструмент экономии времени программиста.

Автор: Afonya 17.10.2007, 16:24
Shaggie
Комментарии помогут за пять секунд понять, что это за сложный алгоритм (какой-нибудь хитрый ацикличный перебор графа) и его предназначение в данном месте. Комментарии помогут за пять секунд узнать, что делает конкретный метод. Не как - это видно из кода, но что. Общая картина складывается быстрее.
Согласен, что в какой-то мере понять помогут. За 5 секунд - вряд ли. Тем не менее практически не видел дельных комментариев ни в коммерческом коде, ни в open source. Ценность же комментирования банальных вещей практически равна нулю.

Дебажил когда-нибудь чужой код? Сваянный тремя программерами последовательно и ещё двумя параллельно?
Отлаживал.

Комментарии помогут быстро вспомнить, что делает эта нелепая конструкция в написанном тобой год назад коде. Поверь, на эти грабли натыкается каждый программист.
А зачем, собственно, писать эти нелепые конструкции? Чтобы потом писать пространные комментарии?

Комментарии есть часть технической документации на программное обеспечение.
Не обязательно.

Короче говоря комментарии - это могучий инструмент экономии времени программиста.
Где конкретно происходит эта экономия?

Автор: Бонифаций 17.10.2007, 18:15
что только люди не придумают, чтобы не писать комментарии. 


Автор: __kish 18.10.2007, 00:27
Цитата

m_ для полей класса
Абсолютно, ИМХО, бессмысленное и малопродуктивное занятие.

Во многих случаях имена передаваемых параметров совпадают с именами полей класса. Может это архитектуру кривую делаю smile

Цитата

ИМХО никакой такой связи между ООП, классическим процедурным программированием и методами длинной в несколько страниц нет.

Облажался - избавить может хорошая архитектура :-[

Цитата

код должен быть понятен без комментариев;

Локальные переменные с именами row, col как раз показывают это утверждение в коде. Ну а префикс, в данном контексте, является комментарием к каждому применению переменной...

Цитата

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

Вот и будет он в Graph::HitriyAnticiklichniyPerebor(...) smile

Цитата

Комментарии есть часть технической документации на программное обеспечение.
С помощью комментариев можно писать аннотации (кто знает Java - меня поймёт).

Абсолютно согласен. Использую Doxygen, обычно достаточно комментирования класса, реже - методов, но комменты внутри метода  говорят что перед Вами мрак - автоматом можно приписывать wtf.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)