Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизКакой должен быть код, чтобы вам было легче его понять ? Найти похожие ветки
← →
Кен (2003-06-27 06:19) [0]Как вообще лучше писать программный код, чтобы он был понятен другим программистам ?
Вот так :
for i := 0 to 9 do
begin
for j := 0 to 9 do
begin
...
end;
end;
или так :
for i := 0 to 9 do begin for j := 0 to 9 do begin
...
end; end;
Зато второе компактнее. Меньше листать экран.
--------
Как лучше записывать формулы с пробелами или без ?
i := 1; или i:=1;
Тоже самое про вызовы функций
f(1,2,3) , f( 1, 2, 3), f ( 1 , 2 , 3 )
--------
Как писать if ?
if ( ( a < b ) and ( c < d ) ) then
или
if ( ( a < b )
and ( c < d ) )
then
ваш вариант.
--------------
Лично меня всегда раздрожает отсутсвие begin и end; Стараюсь их писать всегда. Так проще добавлять чего нибудь. И просто проще, когда всё в одном стиле. Понятнее что к чему относится, где начинается и где кончается.
Как же лучше ?
← →
Zacho (2003-06-27 06:38) [1]
> Кен © (27.06.03 06:19)
> Как вообще лучше писать программный код, чтобы он был понятен
> другим программистам ?
>
> Вот так :
И не так, и не так. А вот так:
for i := 0 to 9 do
begin
for j := 0 to 9 do
begin
...
end;
end;
А вообще - посмотри исходники RTL и VCL Дельфи. Imho, вполне можно использовать как пример правильного оформления кода.
← →
Думкин (2003-06-27 06:47) [2]for i := 0 to 9 do
for j := 0 to 9 do
begin
...
end;
Или по настроению:
for i := 0 to 9 do
for j := 0 to 9 do begin
...
end;
← →
sniknik (2003-06-27 09:00) [3]четкого ответа на вопрос что массам больше нравится нет.
обычно пишу так как Думкин © по настроению, почти.
for i := 0 to 9 do begin
...
for j := 0 to 9 do begin
...
end;
...
end;
или без первых, begin end если там только цикл без кода, но отступ есть всегда.
очень не нравится читать код который весь "прибит" к левому краю без отступов.
← →
Всеволод Соловьёв (2003-06-27 09:02) [4]а если влом расставлять (мне не влом, я автоматом) есть прога DelForEx, она сама все расставит. встраивается в IDE
← →
Думкин (2003-06-27 09:04) [5]> sniknik © (27.06.03 09:00)
Когда писал - отступов не было - это само прибилось. Отступы всегда дела. %-)
← →
passm (2003-06-27 09:16) [6]procedure CodeExample(const StepCount: Integer);
var
i, j: Integer;
begin
for i:= 0 to StepCount - 1 do
begin
for j:= 0 to StepCount - 1 do
begin
...
end;
...
end;
...
i:= 1;
func(i, j, StepCount);
if j < j then
begin
DoSome(StepCount);
DoAny(StepCount)
end
else
DoSomeEx(StepCount)
end;
← →
Dmitriy O. (2003-06-27 09:28) [7]>passm © (27.06.03 09:16)В своем коде Вы написали
....
func(i, j, StepCount);
if j < j then
....
Это опечатка или нет как такой if может работать ведь всегда j=j.
А begin и end я тоже всегда стараюсь ставить.Хотя расставлять код в лом спасибо Всеволод Соловьёв © (27.06.03 09:02) .
← →
ZeroDivide (2003-06-27 09:28) [8]>Какой должен быть код, чтобы вам было легче его понять ?
Существуют правила оформления исходного кода. см. исходники VCL.
← →
k-man (2003-06-27 09:40) [9]Я обычно делаю отступ вложенности 3 пробела. И соблюдаю везде.
Оператор присваивания обязательно так
i := 5;
А условия например так-
if ( ( i < 4 ) and ( b > 5 ) ) then
← →
passm (2003-06-27 10:09) [10]Dmitriy O. © (27.06.03 09:28)> Опечатка.
Begin & end ставлю только при необходимости. Еще не ставлю ; перед end.
← →
Poirot (2003-06-27 10:21) [11]Господа!
На скрлько я помню - у Borland есть свои рекомендации по написанию кода и некоторые русифицированные выдержки есть на сайте http://www.xprogramming.ru
А сами рекомендации есть помоему на сайте борланда, но там где-то далеко...
Эксперт по ним и работает!!!
← →
Sha (2003-06-27 11:51) [12]Экономия строк, отступы и запятые - все с ЕС ЭВМ осталось :)
for i := 0 to 9 do for j := 0 to 9 do begin;
...
end;
← →
Malder (2003-06-27 12:01) [13]По моему, по рускому Госту какому-то, правильно так:
for i := 0 to 9 do
begin
for j := 0 to 9 do
begin
i:=5;
end;
j:=5;
end;
Я так и пишу...
← →
Sha (2003-06-27 12:26) [14]Я для себя эту проблему решил так (с) чей-то:
1) По ГОСТам легко писать, если мозги ГОСТированные.
2) Проще один раз конвертировать, чем постоянно мучиться.
3) Всего несколько простых правил:
- точка с запятой после каждого оператора,
- после begin сдвигаемся враво, после end - влево,
- все пишем в одну строку до точки с запятой или до границы строки,
- при разбиении строки - сдвиг вправо,
- then и else пишутся точно по соответствующим if, если вся конструкция не умещается на одной строке.
← →
Malder (2003-06-27 12:31) [15]По ГОСТам легко писать, если мозги ГОСТированные
Наезд что ли ?
3) Всего несколько простых правил:
- точка с запятой после каждого оператора
Гхм. А почему ты не упомянул про точку после конечного END"а ?
все пишем в одну строку до точки с запятой или до границы строки
then и else пишутся точно по соответствующим if, если вся конструкция не умещается на одной строке
А где вы нашли собственно границу строки ?
← →
Юрий Федоров (2003-06-27 12:46) [16]http://delphi.vitpc.com/article/coderules.htm
← →
Sha (2003-06-27 12:55) [17]>Malder © (27.06.03 12:31)
>Наезд что ли?
Просто к слову пришлось :) ибо ГОСТ есть крайнее выражение рекомендаций.
← →
Sha (2003-06-27 13:14) [18]Автор ветки спрашивал: Какой должен быть код, чтобы вам было легче его понять?
Свой код я понимаю в любом (самом расслабленном) состоянии.
Не возникает никаких проблем с поиском begin-end (всегда ясно, а была ли тут ладья), вложенные if-then-else прекрасно видны (пропустить else просто невозможно). Есть и еще несколько дополнительных правил, на мой взгляд, улучшающих читабельность.
Приведенный стиль довольно давно используется (ноги растут от ЕС-7066, 10 строк х 80 символов) и неплохо себя зарекомендовал.
Malder © (27.06.03 12:31)
- граница строки = граница окна конечно (а что это такое?)
- точка после конечного END обязательна
- привел основные правила
← →
stalker780 (2003-06-27 14:30) [19]А еще лучше пиши на русском языке, IMHO так всем будет понятнее, особенно у кого проблэмс с аглицким :)
← →
stalker780 (2003-06-27 14:32) [20]А еще лучше пиши на русском языке(накрайняк транслитерацией :)), IMHO так всем будет понятнее, особенно у кого проблэмс с аглицким :)
типа:
pri i := 0 do 9 sdelat
nachat
pri j := 0 do 9 sdelat
nachat
...
konec; /*самая веселая часть :)*/
konec;
← →
Malder (2003-06-27 18:25) [21]Так
Malder © (27.06.03 12:31)
- граница строки = граница окна конечно (а что это такое?)
Допустим, у тебя 1024x768. Ты все оформил как надо. И вот отдаешь исходник другу, а у него 800x600. И все твои правила летят к чертовой матери ? Не надо на это рассчитывать...
- точка после конечного END обязательна
ага, значит
точка с запятой после каждого оператора
необязательна ?
← →
Fenik (2003-06-27 20:27) [22]> Кен © (27.06.03 06:19)
> Как писать if ?
> if ( ( a < b ) and ( c < d ) ) then
> или
> if ( ( a < b )
> and ( c < d ) )
> then
> ваш вариант.
Вот так:
if (a < b) and (c < d) then ...
← →
Sha (2003-06-27 21:03) [23]>Malder © (27.06.03 18:25)
Не цепляйся
>Допустим, у тебя 1024x768. Ты все оформил как надо. И вот
>отдаешь исходник другу, а у него 800x600. И все твои правила >летят к чертовой матери ? Не надо на это рассчитывать...
Не рассчитываю. Обычно предельная длина строки = 80, иногда 100. То, что отдаю кому-нибудь не из команды, всегда привожу в божеский вид. Мои исходники есть на UBPFD - посмотри.
>ага, значит точка с запятой после каждого оператора необязательна?
Извини, если задел :)
← →
NightAngel (2003-06-27 21:12) [24]Есть отличная книга о том, каким должен быть код и процесс его проектирования: "Ален И. Голуб - C & C++. Правила программирования".
← →
nikkie (2003-06-27 22:25) [25]>значит точка с запятой после каждого оператора необязательна?
необязательна
← →
Mihey (2003-06-27 22:36) [26]Могет так?
for i := 0 to 9 do // -------------------+
begin // |
for j := 0 to 9 do // -----------+ |
begin // | |
... // | |
end; // -----------+ |
end; // -------------------+
← →
Neox (2003-06-27 23:39) [27]немного оффтоп, но может кто видел правила оформления РНР кода или "расчески" для него?
← →
Asteroid (2003-06-28 02:35) [28]У меня такое форматирование:
interface
const MSG_MESSAGE = 1;
MSG_NOMESSAGE = 2;
MSG_ERROR = 3;
ERROR_TYPE1 = 100;
ERROR_TYPE2 = 101;
...
type
PFloat = ^Float;
Float = Single;
type
TSomeRecord = record
posx, posy: Float;
velx, vely: Float;
accx, accy: Float;
end;
type
TSomeClass = class( TBaseClass )
private
FParm1: Integer;
FParm2: Float;
FParm3: TSomeRecord;
FNumbers: array [ 0..99 ] of Integer;
...
public
constructor Craete();
destructor Destroy(); override;
procedure Init( parm1: Integer; var parm2: string );
procedure Deinit();
function CheckCollision(): Boolean;
function IsAlive(): Boolean;
end;
// Поясняю: пустые строчки группируют функции по смыслу
procedure InitAll( parm1: Integer; var parm2: string );
var Obj: TSomeClass;
implementation
procedure TSomeClass.Init( parm1: Integer; var parm2: string );
var i, j: Integer;
res: string;
function InnerFunction( s: string; var offset: Integer ): string;
begin
Result := Copy( s, offset, offset + 2 );
Inc( offset, 2 );
end;
begin
DoSomething();
res := InnerFunction( parm2, parm1 );
FParm1 := GetTickCount();
// скобки, чтобы проще было понять, что это ф-ция, а не переменная + привычка
...
if ( a + b > 5 ) or ( a - b < 2 ) and
( ( not SomeLongNamedBooleanVariable ) or
( SomeVeryLongBooleanExpression ) ) then
begin
DoSomething(); // бывает, что и для одной строчки begin+end
end
else if ( FParm2 < 3.0 )
begin
// .0 для вещественных ставлю,
// скобки по привычке + удобнее добавлять новые условия
try
DoSomethingElse();
finally
Finalize();
end;
end; // } // а это для комментирования куска кода
// и наконец
for i := 0 to Length( FNumbers ) - 1 do
FNumbers[ i ] := i;
end;
Думаю, общий смысл понятен.
- отступ два пробела на уровень и по смыслу / выравниванию
- begin и end с отступами и на своих строчках
- имена переменных английские, комментарии в основном тоже
- стараюсь не вылезать за ширину окна ( кстати, у меня видна линия на 80 символах )
- пробелы после открывающих и перед закрывающими скобками, между операндами и после запятой ( т.е. почти везде :) ).
- массивы нумеруются с нуля, кроме особых случаев
- скобки при вызове функций и процедур без параметров
- константы заглавными буквами, знаки равенства на одной колонке
- переменные при объявлении группируются по типу и по смыслу
- функции группируются по смысслу, стараюсь сохранить порядок объявления
- в последнее время ненависть к длинным файлам, поэтому глобальные функции разных назначений в разных юнитах.
← →
Кен (2003-06-28 03:39) [29]> Zacho © (27.06.03 06:38)
> > Кен © (27.06.03 06:19)
> > Как вообще лучше писать программный код, чтобы он был
> понятен
> > другим программистам ?
> >
> > Вот так :
Я тоже писал в первом своём посте с отступами, но почему то в форуме отобразилось без них.
> И не так, и не так. А вот так:
> for i := 0 to 9 do
> begin
А вот выносят бегин на новую сточку те, кто не писал действительно больших кодов. Ибо листать замучаешься.
Бегин надо всегда писать в конце того к чему он относится и увеличивать отступ. А когда энд, то отступ уменьшать. Глазу проще по отступу ориентироваться, чем по бегину.
> passm © (27.06.03 09:16)
> end
> else
А вот разносить на разные строчки end и else - вообще расточительство. Всегда пишу слитноend else begin
> ZeroDivide © (27.06.03 09:28)
> >Какой должен быть код, чтобы вам было легче его понять ?
> Существуют правила оформления исходного кода. см. исходники
> VCL.
Ня а. Не существует никаких правил. Ограничения накладывает только компилятор Дельфи. А как представить, чтобы другим было понятнее - это уж наше дело. Вот мы и выясняем.
> Sha © (27.06.03 11:51)
> Экономия строк, отступы и запятые - все с ЕС ЭВМ осталось
> :)
> for i := 0 to 9 do for j := 0 to 9 do begin;
> ...
> end;
Нет. Просто эта фразаfor i := 0 to 9 do for j := 0 to 9 do begin;
просто достала. Ночами сниться. Потому глупо на неё много места тратить. И так ведь всё понятно.
Почему нельзя сделать какую нибуь команду для перебора всех элементов массива ? Хотя это больше в тему о том каких языковых конструкций нам не хватает.
> Sha © (27.06.03 12:26)
> - точка с запятой после каждого оператора,
> - после begin сдвигаемся враво, после end - влево,
> - все пишем в одну строку до точки с запятой или до границы
> строки,
> - при разбиении строки - сдвиг вправо,
> - then и else пишутся точно по соответствующим if, если
> вся конструкция не умещается на одной строке.
Во многом согласен. Насколько после Begin сдвигаться лучше ?
Если множество коротких строк, то не лучше ли их в одну записать ?
i:=0; j:=0; d:=0; b:=0;
Или когда два for подряд идут ?
Про if если не помещается в одну строчку, то чаcто пишу
if ( i<j) then a:="asdf"
else b:="qwer";
То есть else точно под then.
> Asteroid © (28.06.03 02:35)
> if ( a + b > 5 ) or ( a - b < 2 ) and
> ( ( not SomeLongNamedBooleanVariable ) or
> ( SomeVeryLongBooleanExpression ) ) then
Мне больше нравится писать and и or не в концах а в началах последующих строк. Так их проще отключать знаком (//) поставленным перед ними.
← →
Кен (2003-06-28 03:53) [30]Скажите, что делать, если программа достигла скажем 5000 строк ? Как её лучше расчленить, чтобы проще было просматривать, перемещаться по ней ?
Что лучше комментировать ? И как правильно комментировать код ?
Комментарием ведь надо передавать смысл, а не конкретные действия описывать русским языком. Что есть смысл ?
← →
Asteroid (2003-06-28 04:32) [31](черт, уползло в const все...однако я накатал...)
Кен © (28.06.03 03:39)
А вот выносят бегин на новую сточку те, кто не писал действительно больших кодов. Ибо листать замучаешься.
Да ну? Так ты пишешь один пробел (после then или else) - а с новой строкой либо ни одного, максимум - лишний enter.
Лично я если не нахожу begin на следующей строчке, то считаю, что там должна идти одна команда, а не несколько - соответственно при ошибке зачастую приходится возвращаться обратно к if.
Не существует никаких правил
Так же, как и ложки :) Все-таки есть общие рекомендации по оформлению. К тому же, где-то могут потребовать строгое соответствие правилам.
Потому глупо на неё много места тратить
Нет, не глупо. Опять-таки это дело привычки, но я читаю начала строчки - если она длиннее простого выражения, начинаю "подтормаживать", искать, откуда взялась эта j и пр. Насчет команды - а как ты будешь обращаться к элементам массива?
Про if если не помещается в одну строчку
Меня приучили писать if отдельно от else. Jxtym gомогает при отладке.
Если множество коротких строк, то не лучше ли их в одну записать ?
А почему бы и нет?
Или когда два for подряд идут ?
А вот это лучше не надо.
Мне больше нравится писать and и or не в концах а в началах последующих строк
Да, не спорю, но мне проще форматировать, когда они в конце. Просто ставлю два (или три) пробела - и все ок.
Кен © (28.06.03 03:53)
если программа достигла скажем 5000 строк
Я стараюсь не достигать и 1000. Ищи те функции, которые на можно отделить от общей части (например, загрузку и сохранение файлов, рисование, управление, инициализаия + завершение - уже на 4 юнита).
И как правильно комментировать код ?
Комментируй сложные куски, причем так, чтобы ты через полгода смог бы разобраться в коде без особых проблем. Соответственно давай нормальные имена переменным и функциям, чтобы проще было потом все понять. Комментарий написан прежде всего для себя
← →
Malder (2003-06-28 10:48) [32]>значит точка с запятой после каждого оператора необязательна?
необязательна
Так. Nikkie, то есть, я могу ставить ";" после оператора, а могу не ставить ? Необязательно - имеет именно такой смысл - делай как хочешь. Верно ?
А вот выносят бегин на новую сточку те, кто не писал действительно больших кодов
Вот не надо, пожалуйста. Те, кто писали большие программы давно научились разбивать все по модулям. А не думают, как "расчленить" программу из 5000 строк.
Не говоря уже о способах перемещения по тексту. Советую почитать про них
← →
blackweber (2003-06-28 10:50) [33]http://community.borland.com/soapbox/techvoyage/article/1,1795,10280,00.htm - The "Borland style", required for contributers to the JEDI project.
http://www.econos.de/delphi/cs.html - Econos (based on "Delphi Developers Guide")
http://www.ocdelphi.org/standard.htm - Orange County Delphi Users Group
http://delphi.about.com/cs/standards/ - Other standards...
← →
Fenik (2003-06-28 13:05) [34]> Кен:
> Про if если не помещается в одну строчку, то чаcто пишу
> if ( i<j) then a:="asdf"
> else b:="qwer";
> То есть else точно под then.
Зачем лишние скобки???
if i < j then a := "asdf"
else b := "qwer";
← →
Кен (2003-06-29 03:33) [35]> Asteroid © (28.06.03 04:32)
> Кен © (28.06.03 03:53)
> если программа достигла скажем 5000 строк
> Я стараюсь не достигать и 1000. Ищи те функции, которые
> на можно отделить от общей части (например, загрузку и сохранение
> файлов, рисование, управление, инициализаия + завершение
> - уже на 4 юнита).
А как их отделить то ? Если они все к текущей форме общаюатся и при ОнКлик на них всё переходит ?
Я с удовольствием бы сделал кучу Юнитов и разместил бы в них логические части. Но как это связать то всё воедино ? Переменная объявляется в Unit1 , а вызывается в Unit2 и т. д.
> Malder © (28.06.03 10:48)
>> А вот выносят бегин на новую сточку те, кто не писал действительно
>> больших кодов
>
> Вот не надо, пожалуйста. Те, кто писали большие программы
> давно научились разбивать все по модулям. А не думают, как
> "расчленить" программу из 5000 строк.
Так научите же этому форум ! На то он и создан.
> Fenik © (28.06.03 13:05)
> > Кен:
>
> > Про if если не помещается в одну строчку, то чаcто пишу
> > if ( i<j) then a:="asdf"
> > else b:="qwer";
> > То есть else точно под then.
>
> Зачем лишние скобки???
>
> if i < j then a := "asdf"
> else b := "qwer";
Только чтобы глазу было легче зацепиться. Скобки они узкие. На них всёравно много не сэкономишь.
← →
Asteroid (2003-06-29 03:51) [36]> Кен © (29.06.03 03:33)
У юнита есть две части: interface и implementation. Если ты объявляешь переменную в interface, а затем включаешь юнит в другом юните, ты получаешь к ней доступ. Если объявляешь переменную в implementation, она становится глобальной только для функций этого юнита. Юниты можно включать как в interface, так и в implementation.
Лучше пиши код не в OnClick, а в отдельной процедуре. В onClick только ее вызов. Тогда спокойно можно будет все разнести. Какие-то переменные логичнее сделать глобальными - возможно даже завести отдельный класс или record с параметрами и глобальную переменную с типом этого класса или записи.
Кстати, если не знаешь - Ctrl+Scroll - прокрутка постранично.
← →
Bayer_Linse (2003-06-29 04:00) [37]> Кен © (28.06.03 03:53)
> Скажите, что делать, если программа достигла скажем 5000 строк ? Как её лучше расчленить, чтобы проще было просматривать, перемещаться по ней ?
Не правильное проектирование.
Для каждого класса отдельный файл.
Класс не займет 5000 строк.
Если занимает- займись перепроектированием.
← →
Anatoly Podgoretsky (2003-06-29 08:17) [38]Fenik © (28.06.03 13:05)
Что бы тяжелее было читать, так глаз и режет. Вместо зацепки насилии над головой.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.01 c