Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Оформление кода |
Философия, технологии, алгоритмы! |
|
Опции темы |
09.12.2011, 11:15 | #1 |
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Оформление кода
Коллеги, использует ли кто в оформлении кода какими-то специальными стилями оформления кода, как например:
оформление переменных, отступы, и прочие вещи улучшающие читабельность кода. Лично мне нравится делать отступы в 2 символа, писать понятные названия переменных как например: int iCountBase Стараюсь не доходить до маразма как например: double fThisVariableIDefinedForNothing. Ну и так далее. Если не трудно скиньте ссылку на стандарт который вам больше всего нравиться |
09.12.2011, 11:48 | #2 |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
http://ru.wikipedia.org/wiki/%C2%E5%...F2%E0%F6%E8%FF
только всегда для int пишу nCountBase, а не iCountBase А конкретную формулировку придумывать - это с опытом приходит fThisVariableIDefinedForNothing => fDummy |
09.12.2011, 11:54 | #3 |
FatSince2010
|
Пишу в основном на C#.
Использую вот эти правила именования http://msdn.microsoft.com/ru-ru/library/ms229002.aspx, ну и то, что подсказывает Resharper. Когда писал на плюсах, использовал венгерскую нотацию и писал CMyClass ). |
09.12.2011, 12:15 | #4 | ||
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Цитата:
Цитата:
SS20 спасибо за ссылку! |
||
09.12.2011, 13:09 | #5 |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Когда, например? Для циклов я всегда использую переменные i,j,k
Больше трех вложенных крайне редко приходится делать. Для глобальных и членов класса - в обязательном порядке префиксы g_ и m_ тип переменной - тоже обязательно. Не знаю, меня раздражает код, в котором написано нечто вроде int value; //куча кода if (value==5) А какого типа value в условии? Это локальная или глобальная переменная? Или это параметр? Когда код сложный, я даже для параметров функций отдельную нотацию делаю. int Func(int fp_nValue) { //...... } |
09.12.2011, 13:40 | #6 |
FatSince2010
|
Spectator, венгерская нотация - это вопрос вкуса.
Я ей пользоваться перестал, потому что стараюсь писать функции так, чтобы они помещались в один экран, к определению переменной легко перейти (да даже просто узнать тип, наведя мышку), для переменных-членов, локальных переменных и констант достаточно соглашений _privateField, functionParameterOrLocalVar, Property, Constant. ) Последний раз редактировалось SS20; 11.12.2011 в 14:53. |
09.12.2011, 13:44 | #7 |
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Они впринципе, не существенные.
Например когда имеется составной тип. Префикc получится достаточно длинный. С другой стороны, теперь компьютеры достаточно быстрые и практическая любая IDE позволяет посмотреть тип переменной при наведении мышки Если к примеру я сделал переменную другого типа, то мне требуется изменить её название во всём тексте(хотя это и дело 1-5 секунд). Последний раз редактировалось Hopkroft; 09.12.2011 в 14:16. Причина: опечатки... |
10.12.2011, 10:01 | #9 | |
Форумец
Сообщений: 7
Регистрация: 14.08.2007
Не в сети |
Цитата:
- С. Мейерса - серия по эффективному использованию "плюсов", немножко захватывает и читабельность кода, обращает внимание на смысловую нагрузку, к примеру касты, константности, операторы и т.д.; - Р. Мартина - "Чистый код", просто кладезь; - М. Фаулера - "Рефакторинг", много примеров как надо и не надо делать. |
|
10.12.2011, 14:26 | #10 | |
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Цитата:
|
|
10.12.2011, 15:05 | #11 |
Форумец
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 37
Не в сети |
|
10.12.2011, 16:28 | #12 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Именно. А с помощью Visual Assistant - и того быстрее. |
|
11.12.2011, 13:02 | #13 |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Встретил бы такую строку - убил бы автора чайной ложечкой)))
Господа хорошие, вы скачайте с sourceforge.net какой-нибудь проект побольше, и попробуйте в нем разобраться. Там часто встречаются перцы, которые пишут нечто вроде my_class. Скачали? Нашли? Теперь представьте себе что вы только что устроились в контору на проект, в котором 100500 файлов исходников, и там вот эти my_class. какие ваши дальнейшие действия? а) уволиться? б) повеситься? Из тех кто не понимает - зачем нужна венгерская нотация, вы проекты >100 файлов вообще в глаза видели? Это уже реальная цифра вполне. Я и с 1000 файлов наблюдал. И это не предел совсем. |
11.12.2011, 14:44 | #14 | |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Да! Любой код, который написал не Я, считается поганым! =)
Если в проекте сознательно применяется венгерская нотация, то проект или представляет собой монолитный, сильно связный код, который обычно получается на больших объемах с использованием процедурного программирования, или сигнализирует об огромных проблемах в проектировании. Sourceforge, кста, подтверждает эту мысль- 90% того, что там есть, это раздутый и заброшенный helloworld Венгерская нотация хороша, когда используется простой набор конечных типов – int, string и т.п. Как только начинают использоваться хотя бы структуры – надо или изобретать сложные префиксы для разных типов структур, или давать всем один префикс. Оба варианта счастья не добавляют. Ну и при изменении типа (иногда просто перемещение в иерархии классов) программист вынужден судорожно искать все переменные и переименовать (я знаю про "find references", да) Создавать себе работу ради работы? В результате возникает забавная ситуация - в одном месте этому типу соответствует один префикс, в другом – другой, в третьем – третий. И все они правильные. А зачем это все - не знает уже никто. Ну и возвращаясь к теме – оформление, отступы, правила именования имеют смысл в первую очередь при работе в команде. Иначе результаты слияний и диффов при сборке шибко доставляют всем участникам. Когда пишешь в одиночку проект на 100500 строк в первую очередь не об оформлении думать надо, а об архитектуре. Цитата:
Давайте уж лучше про оптимизацию. |
|
11.12.2011, 14:51 | #15 | |
FatSince2010
|
Цитата:
Предыдущий оратор правильно указал - когда появляется куча интерфейсов, классов, структур, венгерская нотация для переменных простых типов только глаза мозолит. |
|
11.12.2011, 17:39 | #18 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
И два поста подряд тем более не надо писать. За третий ни о чем будет неделя. |
|
11.12.2011, 18:08 | #19 |
Форумец
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42
Не в сети |
озадачил, а в каком тогда разделе ?
я хочу обсудить преимущества и недостатки (если они существуют) данной нотации, может быть я действительно много лет заблуждаюсь, хочу знать, также как и топикстартер, чьё кунгфу сильнее, и кстати я даже извинился заранее и отдельным постом, не хотел своим невинным вопросом тебя задеть за живое это на самом деле для меня очень важно ведь это не угроза проекту, а лично мне прасти, больше не буду, но тебе наверное это можно (см выше) ? Последний раз редактировалось The_God; 11.12.2011 в 19:22. |
11.12.2011, 21:44 | #20 | ||
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Цитата:
Или взять исходинки Theif 2. Достаточно успешного проекта, который умельцы, довольно успешно компилируют и модифицируют. Там тоже её почти не встретишь. А вот: Цитата:
P.S. to Spectator Если верить источнику Как заставить неправильный код выглядеть неправильно Автором которого является, Джоэл Сполски, который как раз и работал в M$, то префикс это не тип данных, а вид данных. Так что не о каком "о я глянул на префикс и понял что туда нужно совать float а не int" речи не идёт. Последний раз редактировалось Hopkroft; 11.12.2011 в 22:01. |
||
11.12.2011, 22:41 | #21 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Я лично для этого использую ОТСУТСТВИЕ префикса. m_Window - это в моем коде 100% класс или структура (ну, экземпляр, понятно), что суть одно и то же. |
|
11.12.2011, 22:51 | #22 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Во-вторых, этого товарища я очень уважаю и читаю давно, его начали нормально переводить на русский? Замечательно, он этого заслуживает. Я его на английском читал много лет. В третьих - я с ним согласен целиком и полностью. Неожиданно (с). Я не говорил о том что смысл префиксов - показать тип переменной. Более того, я предлагал использовать для параметров функций префикс fp_nDummy. Тут дело не в холиваре, а в том чтобы получить наиболее хорошо читаемый код. |
|
11.12.2011, 23:12 | #23 | |
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Цитата:
Тут действительно дело не в Холиваре, просто хочется понять ту грань, когда код будет информативным, а когда его описание будет избыточным. Вот например в книге, Отладка в С++ за авторством Крис Х. Паппас, Уильям Х. Мюррей III(кстати, кто-нибудь её читал). Там в самом начале они говорят, что можно использовать префиксы, и указывают префикс для типов int как n, хотя в дальнейшем в коде ставят перед переменными типа int префикс i. Вот такая вот незадача Т.е. в теории одно, а на практике другое |
|
11.12.2011, 23:17 | #24 | |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Цитата:
В современном программировании 99% переменных имеют "комплексный" тип. Для всего остального достачно вменяемого названия, напримера предположить, что свойство Count у коллекции имеет тип double довольно затруднительно. |
|
11.12.2011, 23:24 | #25 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
З.Ы. Летом помогал одной студентке защитить диплом, там была математическая либа, и префикс для основного класса был такой - ZZ))) Либа, кстати, очень навороченная и известная, кому нечего делать или интересно - можете погуглить. |
|
11.12.2011, 23:27 | #26 | |
Форумец
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
|
|
11.12.2011, 23:29 | #27 | |
Registered User
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57
Не в сети |
Цитата:
Всё больше склоняюсь к этому, хотя у меня есть проекты где использовал и венгерскую и понятные названия. Сейчас понимаешь, что можно просто дробить код на основные подзадачи и оформлять их в функции или процедуры, тем самым отпадает необходимость искать переменную в многих страницах экрана. Плюс конечно отказ от глобальных переменных, или при использовании их, изменяю или читаю только с помощью функций или процедур. Так что пока решаю так проблему с читаемостью |
|
11.12.2011, 23:51 | #28 | |
Пессимист
Сообщений: 618
Регистрация: 22.07.2004
Не в сети |
Цитата:
Сначала он мыслит операторами, функциями и глобальными переменными, код представляет собой сильно связанный монолит. Для упрощения жизненно необходимо применять разные ухищрения, чтобы не заблудится в своих "трех процедурах". Одним из этих ухищрений является префиксация. Потом наш программист поднимается до оперирования блоками (объектами). При взгляде на свой код он сразу видит уже не последовательсть операторов, а логику программы. Префиксы, суффиксы и прочие модификации имен переменных используются для получения представления о логике кода за один взгляд на фрагмент. В конце концов программист начинает мыслить межпроцессными взаимодействиями... и уходит в архитекторы (если его перед этим не укусит менеджер и он не уйдет в руководители проекта) =) Истина, как обычно, где-то посредине. Не стоит делать из правил именования культа - делайте как удобно. |
|