Форум: "Прочее";
Текущий архив: 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.042 c