Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.037 c
15-1171347018
Леприкон
2007-02-13 09:10
2007.03.11
Компонент для панели поиска


15-1171479416
Вольный Стрелок
2007-02-14 21:56
2007.03.11
Отключить отладчик в системе


2-1171970365
Scavenger
2007-02-20 14:19
2007.03.11
StringGrid


6-1159851979
YurkaT
2006-10-03 09:06
2007.03.11
из памяти клиенту в браузер


2-1171795680
Litestone
2007-02-18 13:48
2007.03.11
Путь к файлу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский