Старый 09.12.2011, 11:15   #1   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57

Hopkroft вне форума Не в сети
Оформление кода

Коллеги, использует ли кто в оформлении кода какими-то специальными стилями оформления кода, как например:
оформление переменных, отступы, и прочие вещи улучшающие читабельность кода.

Лично мне нравится делать отступы в 2 символа, писать понятные названия переменных как например:
int iCountBase
Стараюсь не доходить до маразма как например:
double fThisVariableIDefinedForNothing.
Ну и так далее.

Если не трудно скиньте ссылку на стандарт который вам больше всего нравиться
  Ответить с цитированием
Старый 09.12.2011, 11:48   #2   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
http://ru.wikipedia.org/wiki/%C2%E5%...F2%E0%F6%E8%FF
только всегда для int пишу nCountBase, а не iCountBase
А конкретную формулировку придумывать - это с опытом приходит
fThisVariableIDefinedForNothing => fDummy
  Ответить с цитированием
Старый 09.12.2011, 11:54   #3   
FatSince2010
 
Аватар для SS20
 
Сообщений: 1,784
Регистрация: 07.07.2007
Возраст: 40
Записей в дневнике: 8

SS20 вне форума Не в сети
Пишу в основном на 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

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Мне почему-то казалось что иногда она избыточна бывает

Цитата:
Сообщение от Spectator Посмотреть сообщение
А конкретную формулировку придумывать - это с опытом приходит
fThisVariableIDefinedForNothing =>
Это верно, но есть например люди которые пропускают гласные в названиях переменных. Или какие-то магические комбинации типа сначала существительные потом глаголы. (точные примеры не могу привести, но помню где-то в какой-то книжке читал.)

SS20 спасибо за ссылку!
  Ответить с цитированием
Старый 09.12.2011, 13:09   #5   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Мне почему-то казалось что иногда она избыточна бывает
Когда, например? Для циклов я всегда использую переменные i,j,k
Больше трех вложенных крайне редко приходится делать.
Для глобальных и членов класса - в обязательном порядке префиксы g_ и m_
тип переменной - тоже обязательно.
Не знаю, меня раздражает код, в котором написано нечто вроде
int value;
//куча кода
if (value==5)

А какого типа value в условии? Это локальная или глобальная переменная? Или это параметр?

Когда код сложный, я даже для параметров функций отдельную нотацию делаю.
int Func(int fp_nValue)
{
//......
}
  Ответить с цитированием
Старый 09.12.2011, 13:40   #6   
FatSince2010
 
Аватар для SS20
 
Сообщений: 1,784
Регистрация: 07.07.2007
Возраст: 40
Записей в дневнике: 8

SS20 вне форума Не в сети
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

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Когда, например?
Они впринципе, не существенные.
Например когда имеется составной тип. Префикc получится достаточно длинный. С другой стороны, теперь компьютеры достаточно быстрые и практическая любая IDE позволяет посмотреть тип переменной при наведении мышки
Если к примеру я сделал переменную другого типа, то мне требуется изменить её название во всём тексте(хотя это и дело 1-5 секунд).

Последний раз редактировалось Hopkroft; 09.12.2011 в 14:16. Причина: опечатки...
  Ответить с цитированием
Старый 10.12.2011, 04:45   #8   
Форумец
 
Аватар для The_God
 
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42

The_God вне форума Не в сети
Цитата:
Сообщение от SS20 Посмотреть сообщение
CMyClass
class my_class
{
...
}

потом гдето в коде переменная:
my_class MyClass;

префиксы типа из венгерской натации скорее мешают (мне)
префиксы юзаю только m_ и g_
  Ответить с цитированием
Старый 10.12.2011, 10:01   #9   
Форумец
 
Сообщений: 7
Регистрация: 14.08.2007

vil вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Коллеги, использует ли кто в оформлении кода какими-то специальными стилями оформления кода, как например:
оформление переменных, отступы, и прочие вещи улучшающие читабельность кода.
Пользуюсь рекомендациями:
- С. Мейерса - серия по эффективному использованию "плюсов",
немножко захватывает и читабельность кода, обращает внимание
на смысловую нагрузку, к примеру касты, константности, операторы и т.д.;
- Р. Мартина - "Чистый код", просто кладезь;
- М. Фаулера - "Рефакторинг", много примеров как надо и не надо делать.
  Ответить с цитированием
Старый 10.12.2011, 14:26   #10   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57

Hopkroft вне форума Не в сети
Цитата:
Сообщение от vil Посмотреть сообщение
Пользуюсь рекомендациями:
- С. Мейерса - серия по эффективному использованию "плюсов",
немножко захватывает и читабельность кода, обращает внимание
на смысловую нагрузку, к примеру касты, константности, операторы и т.д.;
- Р. Мартина - "Чистый код", просто кладезь;
- М. Фаулера - "Рефакторинг", много примеров как надо и не надо делать.
Спасибо. Уже видел эти книги, но детально не знакомился.
  Ответить с цитированием
Старый 10.12.2011, 15:05   #11   
Форумец
 
Сообщений: 491
Регистрация: 02.12.2005
Возраст: 37

Lampus вне форума Не в сети
http://kernel.org/doc/Documentation/CodingStyle
  Ответить с цитированием
Старый 10.12.2011, 16:28   #12   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Они впринципе, не существенные.
Например когда имеется составной тип. Префикc получится достаточно длинный. С другой стороны, теперь компьютеры достаточно быстрые и практическая любая IDE позволяет посмотреть тип переменной при наведении мышки
Когда ты перед релизом шерстишь мегабайты чужих исходников в поисках ошибки, у тебя времени не будет наводить мышкой на каждую переменную, зато у тебя будет желание оторвать руки у тех кто такой поганый код написал.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Если к примеру я сделал переменную другого типа, то мне требуется изменить её название во всём тексте(хотя это и дело 1-5 секунд).
Именно. А с помощью Visual Assistant - и того быстрее.
  Ответить с цитированием
Старый 11.12.2011, 13:02   #13   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от The_God Посмотреть сообщение
class my_class
Встретил бы такую строку - убил бы автора чайной ложечкой)))
Господа хорошие, вы скачайте с sourceforge.net какой-нибудь проект побольше, и попробуйте в нем разобраться.
Там часто встречаются перцы, которые пишут нечто вроде my_class.
Скачали? Нашли? Теперь представьте себе что вы только что устроились в контору на проект, в котором 100500 файлов исходников, и там вот эти my_class.
какие ваши дальнейшие действия?
а) уволиться?
б) повеситься?

Из тех кто не понимает - зачем нужна венгерская нотация, вы проекты >100 файлов вообще в глаза видели? Это уже реальная цифра вполне. Я и с 1000 файлов наблюдал. И это не предел совсем.
  Ответить с цитированием
Старый 11.12.2011, 14:44   #14   
Пессимист
 
Аватар для dn2k4
 
Сообщений: 618
Регистрация: 22.07.2004

dn2k4 вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
желание оторвать руки у тех кто такой поганый код написал.
Да! Любой код, который написал не Я, считается поганым! =)

Если в проекте сознательно применяется венгерская нотация, то проект или представляет собой монолитный, сильно связный код, который обычно получается на больших объемах с использованием процедурного программирования, или сигнализирует об огромных проблемах в проектировании.
Sourceforge, кста, подтверждает эту мысль- 90% того, что там есть, это раздутый и заброшенный helloworld

Венгерская нотация хороша, когда используется простой набор конечных типов – int, string и т.п. Как только начинают использоваться хотя бы структуры – надо или изобретать сложные префиксы для разных типов структур, или давать всем один префикс. Оба варианта счастья не добавляют. Ну и при изменении типа (иногда просто перемещение в иерархии классов) программист вынужден судорожно искать все переменные и переименовать (я знаю про "find references", да) Создавать себе работу ради работы?
В результате возникает забавная ситуация - в одном месте этому типу соответствует один префикс, в другом – другой, в третьем – третий. И все они правильные. А зачем это все - не знает уже никто.

Ну и возвращаясь к теме – оформление, отступы, правила именования имеют смысл в первую очередь при работе в команде. Иначе результаты слияний и диффов при сборке шибко доставляют всем участникам. Когда пишешь в одиночку проект на 100500 строк в первую очередь не об оформлении думать надо, а об архитектуре.

Цитата:
Сообщение от Spectator Посмотреть сообщение
вы проекты >100 файлов вообще в глаза видели? Это уже реальная цифра вполне. Я и с 1000 файлов наблюдал. И это не предел совсем.
Не стоит по малейшему поводу доставать и трясти =]
Давайте уж лучше про оптимизацию.
  Ответить с цитированием
Старый 11.12.2011, 14:51   #15   
FatSince2010
 
Аватар для SS20
 
Сообщений: 1,784
Регистрация: 07.07.2007
Возраст: 40
Записей в дневнике: 8

SS20 вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Из тех кто не понимает - зачем нужна венгерская нотация, вы проекты >100 файлов вообще в глаза видели? Это уже реальная цифра вполне. Я и с 1000 файлов наблюдал. И это не предел совсем.
Да, и без малейших признаков венгерской нотации.

Предыдущий оратор правильно указал - когда появляется куча интерфейсов, классов, структур, венгерская нотация для переменных простых типов только глаза мозолит.
  Ответить с цитированием
Старый 11.12.2011, 16:03   #16   
Форумец
 
Аватар для The_God
 
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42

The_God вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
>100 файлов вообще в глаза видели
не, не видел, прасти
  Ответить с цитированием
Старый 11.12.2011, 16:05   #17   
Форумец
 
Аватар для The_God
 
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42

The_God вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
int Func(int fp_nValue)
а зачем эти сокращения ? давайте разавьём идею, и будем полностью имя типа писать перед именем переменной, например через подчеркивание
  Ответить с цитированием
Старый 11.12.2011, 17:39   #18   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от The_God Посмотреть сообщение
а зачем эти сокращения ? давайте разавьём идею, и будем полностью имя типа писать перед именем переменной, например через подчеркивание
Не надо развивать идею, по крайней мере - в этом разделе. Если Вам что-то непонятно - спросите или поинтересуйтесь. Флудить не стоит.
И два поста подряд тем более не надо писать. За третий ни о чем будет неделя.
  Ответить с цитированием
Старый 11.12.2011, 18:08   #19   
Форумец
 
Аватар для The_God
 
Сообщений: 1,109
Регистрация: 19.12.2004
Возраст: 42

The_God вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Не надо развивать идею, по крайней мере - в этом разделе.
озадачил, а в каком тогда разделе ?
я хочу обсудить преимущества и недостатки (если они существуют) данной нотации, может быть я действительно много лет заблуждаюсь, хочу знать, также как и топикстартер, чьё кунгфу сильнее, и кстати я даже извинился заранее и отдельным постом, не хотел своим невинным вопросом тебя задеть за живое

это на самом деле для меня очень важно
Цитата:
Сообщение от Spectator Посмотреть сообщение
Встретил бы такую строку - убил бы автора
ведь это не угроза проекту, а лично мне

Цитата:
Сообщение от Spectator Посмотреть сообщение
И два поста подряд тем более не надо писать
прасти, больше не буду, но тебе наверное это можно (см выше) ?

Последний раз редактировалось The_God; 11.12.2011 в 19:22.
  Ответить с цитированием
Старый 11.12.2011, 21:44   #20   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Из тех кто не понимает - зачем нужна венгерская нотация, вы проекты >100 файлов вообще в глаза видели? Это уже реальная цифра вполне. Я и с 1000 файлов наблюдал. И это не предел совсем.
Исходники Windows NT 4. Довольно часто можно встречать что они не используют венгерскую нотацию.
Или взять исходинки Theif 2. Достаточно успешного проекта, который умельцы, довольно успешно компилируют и модифицируют. Там тоже её почти не встретишь.
А вот:
Цитата:
префиксы юзаю только m_ и g_
Встречается и достаточно часто.

P.S.
to Spectator
Если верить источнику
Как заставить неправильный код выглядеть неправильно
Автором которого является, Джоэл Сполски, который как раз и работал в M$, то префикс это не тип данных, а вид данных. Так что не о каком "о я глянул на префикс и понял что туда нужно совать float а не int" речи не идёт.

Последний раз редактировалось Hopkroft; 11.12.2011 в 22:01.
  Ответить с цитированием
Старый 11.12.2011, 22:41   #21   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от dn2k4 Посмотреть сообщение
Венгерская нотация хороша, когда используется простой набор конечных типов – int, string и т.п. Как только начинают использоваться хотя бы структуры – надо или изобретать сложные префиксы для разных типов структур, или давать всем один префикс.
Не надо ничего изобретать. Достаточно указать что переменная имеет комплексный тип.
Я лично для этого использую ОТСУТСТВИЕ префикса.
m_Window - это в моем коде 100% класс или структура (ну, экземпляр, понятно), что суть одно и то же.
  Ответить с цитированием
Старый 11.12.2011, 22:51   #22   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
to Spectator
Если верить источнику
Как заставить неправильный код выглядеть неправильно
Автором которого является, Джоэл Сполски, который как раз и работал в M$, то префикс это не тип данных, а вид данных. Так что не о каком "о я глянул на префикс и понял что туда нужно совать float а не int" речи не идёт.
Ну, во-первых, это не "источник".
Во-вторых, этого товарища я очень уважаю и читаю давно, его начали нормально переводить на русский? Замечательно, он этого заслуживает. Я его на английском читал много лет.
В третьих - я с ним согласен целиком и полностью. Неожиданно (с). Я не говорил о том что смысл префиксов - показать тип переменной. Более того, я предлагал использовать для параметров функций префикс fp_nDummy. Тут дело не в холиваре, а в том чтобы получить наиболее хорошо читаемый код.
  Ответить с цитированием
Старый 11.12.2011, 23:12   #23   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Я не говорил о том что смысл префиксов - показать тип переменной. Более того, я предлагал использовать для параметров функций префикс fp_nDummy. Тут дело не в холиваре, а в том чтобы получить наиболее хорошо читаемый код.
Если судить по твоим постам то было упоминание, что префиксы могут улучшить информативность переменных, в том числе и по типу.

Тут действительно дело не в Холиваре, просто хочется понять ту грань, когда код будет информативным, а когда его описание будет избыточным.
Вот например в книге, Отладка в С++ за авторством Крис Х. Паппас, Уильям Х. Мюррей III(кстати, кто-нибудь её читал).
Там в самом начале они говорят, что можно использовать префиксы, и указывают префикс для типов int как n, хотя в дальнейшем в коде ставят перед переменными типа int префикс i. Вот такая вот незадача Т.е. в теории одно, а на практике другое
  Ответить с цитированием
Старый 11.12.2011, 23:17   #24   
Пессимист
 
Аватар для dn2k4
 
Сообщений: 618
Регистрация: 22.07.2004

dn2k4 вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Достаточно указать что переменная имеет комплексный тип. Я лично для этого использую ОТСУТСТВИЕ префикса.
Только что вы личным примером отлично продемонстрировали отсуствие необходимости в венгерской нотации =)
В современном программировании 99% переменных имеют "комплексный" тип. Для всего остального достачно вменяемого названия, напримера предположить, что свойство Count у коллекции имеет тип double довольно затруднительно.
  Ответить с цитированием
Старый 11.12.2011, 23:24   #25   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Там в самом начале они говорят, что можно использовать префиксы, и указывают префикс для типов int как n, хотя в дальнейшем в коде ставят перед переменными типа int префикс i. Вот такая вот незадача Т.е. в теории одно, а на практике другое
Открою большую тайну - неважно, какую букву использовать. Важно чтобы 20000 леммингов, работающих над одним проектом, использовали одну и ту же. В M$ используют n для типа int. Потому - n лучше. А так - можно любую букву использовать.
З.Ы. Летом помогал одной студентке защитить диплом, там была математическая либа, и префикс для основного класса был такой - ZZ))) Либа, кстати, очень навороченная и известная, кому нечего делать или интересно - можете погуглить.
  Ответить с цитированием
Старый 11.12.2011, 23:27   #26   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от dn2k4 Посмотреть сообщение
Только что вы личным примером отлично продемонстрировали отсуствие необходимости в венгерской нотации =)
В современном программировании 99% переменных имеют "комплексный" тип. Для всего остального достачно вменяемого названия, напримера предположить, что свойство Count у коллекции имеет тип double довольно затруднительно.
Это не так Что Вы подразумеваете под "современным программированием"?
  Ответить с цитированием
Старый 11.12.2011, 23:29   #27   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 57

Hopkroft вне форума Не в сети
Цитата:
Сообщение от dn2k4 Посмотреть сообщение
Для всего остального достачно вменяемого названия, напримера предположить, что свойство Count у коллекции имеет тип double довольно затруднительно.
+1.
Всё больше склоняюсь к этому, хотя у меня есть проекты где использовал и венгерскую и понятные названия.
Сейчас понимаешь, что можно просто дробить код на основные подзадачи и оформлять их в функции или процедуры, тем самым отпадает необходимость искать переменную в многих страницах экрана.
Плюс конечно отказ от глобальных переменных, или при использовании их, изменяю или читаю только с помощью функций или процедур. Так что пока решаю так проблему с читаемостью
  Ответить с цитированием
Старый 11.12.2011, 23:51   #28   
Пессимист
 
Аватар для dn2k4
 
Сообщений: 618
Регистрация: 22.07.2004

dn2k4 вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
хочется понять ту грань, когда код будет информативным, а когда его описание будет избыточным.
Эта грань весьма субъективна. Как показывает практика, в развитии программиста выделяются несколько "этапов" понимания своего кода.

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

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

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

Истина, как обычно, где-то посредине. Не стоит делать из правил именования культа - делайте как удобно.
  Ответить с цитированием
Старый 11.12.2011, 23:54   #29   
Пессимист
 
Аватар для dn2k4
 
Сообщений: 618
Регистрация: 22.07.2004

dn2k4 вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
Что Вы подразумеваете под "современным программированием"
Летнюю помощь студенткам в защите дипломов, естественно. Не вытаскивайте мерятся, пожалуйста.
  Ответить с цитированием
Старый 12.12.2011, 00:28   #30   
Форумец
 
Аватар для Spectator
 
Сообщений: 41,173
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от dn2k4 Посмотреть сообщение
Летнюю помощь студенткам в защите дипломов, естественно. Не вытаскивайте мерятся, пожалуйста.
предупреждение не флудим излишне.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind