Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.11;
Скачать: CL | DM;

Вниз

Вопрос для знающих....   Найти похожие ветки 

 
vasIZmax ©   (2007-02-16 02:51) [0]

вот случайно в нэте попалась статейка "как правильно оформлять код". неужели в самом деле так надо код оформлять??? понятно что, каждый оформляет как ему "привычнее", но а в крупных организациях - есть какие-то стандарты?
ЗЫ. чуть не забыл ссылочку http://www.cyberguru.ru/programming/delphi/delphi-code-standard.html


 
IA   (2007-02-16 03:44) [1]

Стандарты в коллективной разработке нужны, иначе начнется хаос,
быстро проглядев ничего особо криминального в статье не нашел. Главное помнить, что исполнение правил базируется на 2 китах - кнуте и нет, не прянике, а легкости исполнения. Кнут - это неизбежность наказания, под неизбежностью понимается комплекс мер автоматической проверки выполнения правил (FxCop, NDoc),  под легкостью - минимализация затрат труда программиста для выполнения правил - форматтеры, генерация и изменения шапки файла системой контроля версий, эксперты в IDE и проч. Без наличия этих двух факторов стандарт либо умрет, превратится в профанацию или станев вещью в себе.


 
КиТаЯц ©   (2007-02-16 08:09) [2]


> неужели в самом деле так надо код оформлять???

Да. Хотя лично я многие рекомендации игнорирую. Например строка у меня может быть ну очень длинной (не 80 символов как рекомендуют), а также начисто игнорирую рекомендацию переносить begin в начало строки. Вот что точно использую, так это рекомендацию "комментарий к каждой строке" (как-то открыл свой старый исходник - долго понять не мог что там и как. С тех пор пишу.).


 
MsGuns ©   (2007-02-16 08:34) [3]

>КиТаЯц ©   (16.02.07 08:09) [2]
>С тех пор пишу.).

По-китайски ?


 
KSergey ©   (2007-02-16 09:10) [4]

На самом деле - не важно какие стандарты. Все едино к ним привыкаешь - да и все.
Занятно то, что потом смотреть на то, как привык оформлять ранее - очень непривычно и хочется быстрее все переформатировать и переменные переобозвать :)

Хотя и встречаются толковые. но в этом месте - костные товарищи, правда мне их как-то не понять.


 
КиТаЯц ©   (2007-02-16 09:20) [5]


> MsGuns ©   (16.02.07 08:34) [3]
>

:)
Ну, разумеется нет. Исключительно на "читабельном" языке.


 
ЮЮ ©   (2007-02-16 10:22) [6]

Вот что точно использую, так это рекомендацию "комментарий к каждой строке"

как в примере по ссыле?:

procedure TForm1.Button1Click(Sender: TObject);
begin
 DoThis; // Start the process
 DoThat; // Continue iteration
 CallMoreCode; // Finalize the process
end;


А интересно, как бы они прокомментировали, напиши сразу

procedure TForm1.Button1Click(Sender: TObject);
begin
 StartProcess;
 ContinueIteration;
 FinalizeProcess;
end;


P.S. TForm1 и Button1 гораздо больше говорят о стиле :)


 
Игорь Шевченко ©   (2007-02-16 10:30) [7]

"Ни в коем случае в исходных файлах Object Pascal нельзя использовать табуляцию" - бред какой-то.


 
Megabyte ©   (2007-02-16 10:37) [8]


> Игорь Шевченко ©  (16.02.07 10:30) [7]

"Ни в коем случае в исходных файлах Object Pascal нельзя использовать табуляцию" - бред какой-то.

Вот, я тоже это не понял. Пишут, что нельзя использовать табуляцию, а потом, что надо делать отступы в 2 пробела - а это что же тогда как не табуляция... :)


 
Desdechado ©   (2007-02-16 10:41) [9]

Корпоративный стандарт должен быть. И он - единственно правильный в рамках корпорации.


 
ПЛОВ ©   (2007-02-16 10:44) [10]


> Ни в коем случае в исходных файлах Object Pascal нельзя
> использовать табуляцию

Наверное имеется в виду что делать отступы нужно только клавишей ПРОБЕЛ а не ТАВ. Хотя вроде как ТАВ в редакторе именно и делает отступ в 2 пробела.


 
КиТаЯц ©   (2007-02-16 10:46) [11]


> Megabyte ©   (16.02.07 10:37) [8]
> ...
> табуляцию, а потом, что надо делать отступы в 2 пробела
> - а это что же тогда как не табуляция... :)

2 пробела - это #32#32, а табуляция - #9


 
Desdechado ©   (2007-02-16 10:47) [12]

> ТАВ в редакторе именно и делает отступ в 2 пробела.
Это как настроишь (и число пробелов, и код).


 
Игорь Шевченко ©   (2007-02-16 10:49) [13]

КиТаЯц ©   (16.02.07 10:46) [11]

И чего ? Компилятор не распознает символ #9 ? Вроде прекрасно распознает.


 
vasIZmax ©   (2007-02-16 10:52) [14]

Открыл первый попавшийся свой .pas, и был приятно удивлен - почти все по правилам на писано.))))))

И еще вопрос как раз по теме. Вот есть определеные критерии которые определяют хороший стиль программирования:

1. Не использовать goto(во всех книгах так и написано "использовать goto является плохим тоном в программировании")
2. Делать комментарии
3. Осмысленные имена переменных, констант
4. Делать правильные отступы.


это то что вспомнил. все перечислил? или еще есть?


 
Efir ©   (2007-02-16 10:52) [15]

Я тоже не любитель собирать пирамиды в редакторе. Мне больше равится компактный код, поэтому пишу так:

for i:=0 to 10 do begin
 lalala
 lalala
 if a>8 thren begin
   lalala
   lalala
 end;
end;


 
КиТаЯц ©   (2007-02-16 10:53) [16]


> Игорь Шевченко ©   (16.02.07 10:49) [13]

Это я к тому, что авторы статьи "не рекомендуют" вставлять символ табуляции в текст исходника. Я так это понял.
Распознает компилятор или нет - другой вопрос (распознает разумеется).


 
Думкин ©   (2007-02-16 10:54) [17]

> 2. Делать комментарии

Не обязательно. Более того, многими не приветсвуется. И это не программирования, а кодирования - где про отступы.


 
Игорь Шевченко ©   (2007-02-16 10:57) [18]

КиТаЯц ©   (16.02.07 10:53) [16]

Вроде я цитату целиком привел, в отличие от "не рекомендуют" там сказано "ни в коем случае".

Упаси нас Аллах от правоверных более его.

К стилю программист должен приходить либо сам, либо принимать корпоративный, третьего не дано. А тут народ палками бьет по рукам неразумных.

Не нравится.


 
КиТаЯц ©   (2007-02-16 10:59) [19]


> Efir ©   (16.02.07 10:52) [15]

А я примерно так:

for i:=0 to 10 do begin
 lalala
 lalala // второй раз обязательно, т.к. с первого раза не всегда получается :D
 if (a>8) then begin // не помню откуда эта мания скобки ставить... :(
   lalala
   lalala
 end; // if a>8 then
end; // for i:=0 to 10 do


 
КиТаЯц ©   (2007-02-16 11:01) [20]


> Игорь Шевченко ©   (16.02.07 10:57) [18]
>
> Вроде я цитату целиком привел, в отличие от "не рекомендуют"
> там сказано "ни в коем случае".

ОК. Пусть будет "ни в коем случае". Сути дела не меняет.

> К стилю программист должен приходить либо сам, либо принимать
> корпоративный, третьего не дано.

Согласен полностью


 
palva ©   (2007-02-16 11:11) [21]


> Игорь Шевченко ©   (16.02.07 10:49) [13]
> И чего ? Компилятор не распознает символ #9 ? Вроде прекрасно
> распознает.

Я работал в одной конторе, где тоже запрещалось пользоваться табуляцией, а число пробелов было стандартизовано - 4. Это облегчало делать Copy Paste. Можно было бы в качестве стандарта принять табуляцию и запретить пробелы. Но любая смесь стандартов в одном модуле приводит к сбою отступов.


 
Ученик чародея ©   (2007-02-16 13:02) [22]

Вот что происходит с людьми которые не используют CVS

{************************************************************}
{                                                            }
{                 Модуль ХХХ                                 }
{       Copyright (c) 2001  ООО ХХХХ                         }
{               отдел/сектор                                 }
{                                                            }
{  Разработчик: ХХ ХХ                                        }
{  Модифицирован: 25 июня 2001                               }
{                                                            }
{************************************************************}


 
Думкин ©   (2007-02-16 13:04) [23]

> Ученик чародея ©   (16.02.07 13:02) [22]

Они работают внештатными провокаторами или чего?


 
Ketmar ©   (2007-02-16 13:20) [24]

> Думкин ©   (16.02.07 13:04) [23]
они используют SVN и вспоминают CVS как страшный сон. %-)
а те, кто ниасилил SVN -- уходят в чародеи.


 
ocean ©   (2007-02-16 13:27) [25]

Стандарты в компьютерном деле, как мы знаем, вещь не хорошая, а жизненно необходимая. Предложенная ссылка мне кажется вполне разумной. Правила же
> vasIZmax ©   (16.02.07 10:52) [14]
называются структурным программированием. Их можно поискать по фамилии Дейкстра. Однако сейчас у нас объектное программирование, являющееся в какой-то мере его обобщением.


 
Карелин Артем ©   (2007-02-16 14:19) [26]

Хммм... Я примочку для автоматического форматирования текста поставил и не заботит меня форматирование. На автомате пишу.


 
Карелин Артем ©   (2007-02-16 14:25) [27]

В студии 2005 еще лучше сделали! Там форматирование просто прелесть!


 
Дмитрий Белькевич ©   (2007-02-16 15:56) [28]

>Хммм... Я примочку для автоматического форматирования текста поставил и не заботит меня форматирование. На автомате пишу.

+1. Поставил себе и другим DelForExp. Сам форматирую, как нравиться, а люди, которые у меня пишут - как им нравится. Сделал врап побольше, что бы не строки не заворачивались. Все довольны. Два нажатия кнопок - сырцы полностью переформатируются (правда, чуть глюков некритичных есть, никак до форматера не доберусь поправить).

>1. Не использовать goto(во всех книгах так и написано "использовать goto является плохим тоном в программировании")

Иногда таких лесниц настроят, что бы гоуту не пользовать - что уж лучше он. Полтзую иногда.

>2. Делать комментарии

Делаю в особенно критичных местах, вообще по проекту десятка два коментов среди нескольких десятков тысяч строк.

>3. Осмысленные имена переменных, констант

Это однозначно. Иначе в каше запутаешься на второй же месяц, если память хорошая. Если плохая - на вторую неделю.

4. Делать правильные отступы.

Автоформатеры рулят, однозначно. Экономят много времени. Я код почти никогда сразу не ровняю, 10-20 строк написал - ctrl-d - enter, всё поровнялось.


 
DesWind ©   (2007-02-16 16:33) [29]

По по воду табуляции (#9), если она присутствует, то потом в другой среде с другими настройками не всегда хорошо смотрится. А в редакторе есть настройки заменять ли клавишу "Tab" пробелами.


 
Loginov Dmitry ©   (2007-02-16 16:55) [30]

Блочные комментарии

Object Pascal поддерживает два типа блочных комментариев. Наиболее часто используемый блочный комментарий - это пара фигурных скобок: { }. Команда разработчиков Delphi предпочитает использовать этот комментарий как можно проще и как запасной. Используйте в таких комментариях пробелы для форматирования текста и не используйте символы зведочка "*".


Интересно, что такого крименального в символе "*"?

Тело класса при его декларации подчинено следующей структуре:

   * Объявление полей;
   * Объявление методов;
   * Объявление свойств.

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


Интресно, про алфавитный порядок - эта параноя только у автора статьи, или еще у кого?

Никогда не указывайте уровень доступа public для данных. Данные всегда должны быть объявлены в приватной секции и доступ к ним должен осуществляться с помощью методов или свойств.

Параноик. Слов нет. Небось в классе формы автор и сам эти свойства не использует. Это вредно. D7 при нажатии Ctrl+Shift+C в классе формы часто виснет.

Оператор if
Оператор if всегда должен располагаться по крайней мере на двух строках
Неправильно

if A < B then DoSomething;

Правильно

if A < B then
 DoSomething;


Только здесь такое правило возникло из-за того, что если все в одной строке, то это невозможно разобрать под отладчиком. Из этого нужно было исходить. Поэтому в конструкции
if A < B then Exit;
криминала нет никакого. При переносе Exit на другую строки ни красоты кода, ни упрощения отладки не добиться.


В случае составного оператора необходимо поместить каждый оператор на новую строку.
Неправильно

 if A < B then begin
   DoSomething;
   DoSomethingElse;
 end else begin
   DoThis;
   DoThat;
 end;

Правильно

 if A < B then
 begin
   DoSomething;
   DoSomethingElse;
 end
 else
 begin
   DoThis;
   DoThat;
 end;


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

 if A < B then
 begin
   DoSomething;
   DoSomethingElse;
 end else begin
   DoThis;
   DoThat;
 end;

Читабельность от этого ну никак не пострадает.


Оператор try

Несмотря на то, что существует множество синтаксически правильных конструкций, одобренной и рекомендованной считается следующая:
Правильно

try
 try
   EnumThreadWindows(CurrentThreadID, @Disable, 0);
   Result := TaskWindowList;
 except
   EnableTaskWindows(TaskWindowList);
   raise;
 end;
finally
 TaskWindowList := SaveWindowList;
 TaskActiveWindow := SaveActiveWindow;
end;


Автор статьи себя наверное понял. Это - главное.


 
Ketmar ©   (2007-02-16 17:02) [31]

> Loginov Dmitry ©   (16.02.07 16:55) [30]
> невозможно разобрать под отладчиком
WriteLn наш отладчик.


 
Loginov Dmitry ©   (2007-02-16 17:02) [32]

Но есть и полезное.
Из справки по Delphi ни за что не узнаешь, что в операторе Case в секции Else можно ввести несколько операторов без использования лишних begin..end

В целом статья правильная, поддерживаю ее на все 90% :))


 
Игорь Шевченко ©   (2007-02-16 17:09) [33]

Loginov Dmitry ©   (16.02.07 16:55) [30]


> Интресно, про алфавитный порядок - эта параноя только у
> автора статьи, или еще у кого?


Еще у кого. Например у Борланда. Там вообще все сплошь параноики работают.


> Параноик. Слов нет. Небось в классе формы автор и сам эти
> свойства не использует. Это вредно. D7 при нажатии Ctrl+Shift+C
> в классе формы часто виснет.


Учим основы ООП долго и вдумчиво.


> if A < B then Exit;
> криминала нет никакого. При переносе Exit на другую строки
> ни красоты кода, ни упрощения отладки не добиться.


if A < Foo() then Bar()

Ставь точку останова, если тебе нужно поймать истинность условия и только ее.

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


 
Loginov Dmitry ©   (2007-02-16 17:13) [34]

> Учим основы ООП долго и вдумчиво.


Из-за этого виснуть перестанет?


 
Джо ©   (2007-02-16 17:13) [35]

> Из справки по Delphi ни за что не узнаешь, что в операторе
> Case в секции Else можно ввести несколько операторов без
> использования лишних begin..end

Each value represented by a caseList must be unique in the case statement; subranges and lists cannot overlap. A case statement can have a final else clause:

case selectorExpression of

 caseList1: statement1;
 ...
 caseListn: statementn;
else
 statements;
end

where statements is a semicolon-delimited sequence of statements

(c) Справка Delphi, раздел Case statements


 
Loginov Dmitry ©   (2007-02-16 17:17) [36]

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


 
Джо ©   (2007-02-16 17:21) [37]

> [36] Loginov Dmitry ©   (16.02.07 17:17)
> Могли бы в справке это утверждение хотябы примерами подчеркнуть.

Можно было бы внимательно прочитать справку, прежде, чем постить [32] Loginov Dmitry ©.


 
Ketmar ©   (2007-02-16 17:22) [38]

> Loginov Dmitry ©   (16.02.07 17:17) [36]
ну так предполагается, что с языком ты дружишь. справка -- она не учебник.


 
vasIZmax ©   (2007-02-16 19:22) [39]

> ocean ©   (16.02.07 13:27) [25] Их можно поискать по фамилии Дейкстра.
нашел Дейкстра. вот http://www.vspu.ac.ru/~chul/dijkstra/goto/goto.htm .

Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подвеглись необратимой умственной деградации. это уже из вики.
http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D0%B0,_%D0%AD%D0%B4%D1%81%D0%B3%D0%B5%D1%80_%D0%92%D0%B0%D0%B9%D0%B1

Хоть и афоризм - но ... я с ним не согласен. если бы не бейсик, я бы фих понял паскаль, а затем и дельфи.
ЗЫ. ...


 
Olivetti   (2007-02-16 20:09) [40]

Loginov Dmitry ©   (16.02.07 16:55) [30]

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

if A < B then
begin
  DoSomething;
  DoSomethingElse;
end else begin
  DoThis;
  DoThat;
end;

Читабельность от этого ну никак не пострадает.


В реальном проекте постороннему человеку, читая твой код, придется напрягаться, что может привести к нехорошим последствиям...

Вариант 1:

if (a <> b) and (b <> c) and (c <> d) and (d <> e) and (e <> f) and (f <> g) then begin
 a := b;
 b := c;
 c := d;
  // тут еще много кода
end;


Вариант 2:

if (a <> b) and (b <> c) and (c <> d) and (d <> e) and (e <> f) and (f <> g) then
 a := b;
 b := c;
 c := d;
  // тут еще много кода
end;


Вариант 3:

if (a <> b) and (b <> c) and (c <> d) and (d <> e) and (e <> f) and (f <> g) then
begin
 a := b;
 b := c;
 c := d;
  // тут еще много кода
end;


В 1-м варианте можно не заметить begin далеко в конце строки, и подумать, что при выполнении условия выполняется только строка a:= b, как в варианте 2. А 3-й вариант эту неточность прочтения исключает.



Страницы: 1 2 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.032 c
15-1171442568
Empleado
2007-02-14 11:42
2007.03.11
Вот такая вот катавасия...


2-1171730363
FIL-23
2007-02-17 19:39
2007.03.11
как использовать переменные из других unit ов (form)


6-1159950477
POINT
2006-10-04 12:27
2007.03.11
webbrowser


6-1159976954
XfroSt
2006-10-04 19:49
2007.03.11
Узнать свойства "Подключения по локальной сети"


3-1165911695
Megabyte
2006-12-12 11:21
2007.03.11
Оптимизировать запрос