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

Вниз

Форматирование текста программ   Найти похожие ветки 

 
zavdim   (2002-12-17 10:57) [0]

У меня такой вопрос:
кто как код форматирует?
в смысле begin end и т.д. как ставим?


 
down   (2002-12-17 11:05) [1]

Когда как, в зависимости от настроения, главное, чтоб работало!
(Шучу-шучу, Borland style)


 
Ketmar   (2002-12-17 11:08) [2]

ага. borland style. в основном. плюс - несколько добавок от себя. и плюс - стандарты на заголовки модулей/комментарии к процедурам (a-la Q2).

Satanas Nobiscum! 17-Dec-XXXVII A.S.


 
Anatoly Podgoretsky   (2002-12-17 11:21) [3]

Основа Borland Style (он вполне естественнен, поэтому мой стиль хоть и создавался независимо от них, но оказался почти копией), со своими модификациями, иногда от настроения (я как раз не шучу)


 
Mirovodin   (2002-12-17 11:27) [4]

Expert DelforExp
http://www.dow.wau.nl/aew/DelForExp.html


 
RV   (2002-12-17 11:28) [5]

ffff=class(dddd);
fffffffff
fffffffff
ffffffff
end;

вот единственно мне что не нравится(с record тоже)
а так Borland Style очень хороший

ffff=class(dddd);
fffffffff
fffffffff
ffffffff
end;
вот так, имхо, лучше.
(наверное все собьется :))


 
Anatoly Podgoretsky   (2002-12-17 11:35) [6]

Используй местный тег "Код"


 
RV   (2002-12-17 11:44) [7]

Anatoly Podgoretsky © (17.12.02 11:35)

а я думаю, что именинники синим ?!
Блин, недогадался!


тест

ffff=class(dddd);
fffffffff
fffffffff
ffffffff
end;
вот так, имхо, лучше.



 
Кот Бегемот   (2002-12-17 11:58) [8]


with Data.ibqUsersActive do
// Неплохо было бы коннект проверить :)
if Database.Connected
then begin
First();
for i:=0 to iActiveCount-1 do begin
lbUsers.Items.Add(FieldByName("sys_name").AsString);
Next();
end;{for i}
end;{if}


 
Игорь Шевченко   (2002-12-17 12:00) [9]

Я использую стиль Кернигана-Ричи, перенесенный на паскаль.
begin на одной строке с if, while, for и т.д.
Строчек меньше получается.
Всегда пишу часть после then и else на отдельной строке - отладчиком удобно останавливаться.
И внедряю этот стиль во всем проекте :-)))


 
Anatoly Podgoretsky   (2002-12-17 12:01) [10]

Лучше, но ты не учитываешь одну вещь, данный тег съедает один пробел, поэтому если хочешь что бы было точно то его надо добавить вручную, вот так


ffff=class(dddd);
fffffffff
fffffffff
ffffffff
end
;


 
Anatoly Podgoretsky   (2002-12-17 12:05) [11]

Черт, тоже не получилос, не добавил должное количество пробелов, сейчас исправлюсь


ffff=class(dddd);
fffffffff
fffffffff
ffffffff
end


 
Igorek   (2002-12-17 13:18) [12]


> Игорь Шевченко © (17.12.02 12:00)
> Я использую стиль Кернигана-Ричи, перенесенный на паскаль.
> begin на одной строке с if, while, for и т.д.
> Строчек меньше получается.
> Всегда пишу часть после then и else на отдельной строке
> - отладчиком удобно останавливаться.
> И внедряю этот стиль во всем проекте :-)))

А меня просто убивает когда лепят все в одно строке. Лично я всегда begin пишу в новой строке. Также после else всегда начинаю новую строку. Строчек больше, зато читабельность выше.


 
MetalFan   (2002-12-17 13:28) [13]


> Игорь Шевченко ©

согласен с вами!
читабельность текста не страдает, и компактность)
зачем бегин на другую строку переносить?
еще я так пишу:

if somevar=something then begin
while somevar1<somevar2 do begin
end; //while
showmessage("sometext");
end; //if


 
sniknik   (2002-12-17 13:32) [14]

Люди! да половину из вас на работу не возьмут! по причине непонравившегося кода! см. ветку "Нужен программист".

правда непонятно какую? половину. :о))


 
Ihor Osov'yak   (2002-12-17 13:33) [15]

Игорь Шевченко © (17.12.02 12:00) - 1:1 (но не знал, что на Кернигана-Ричи сослаться можно :-), я называл это "почти борландовский")

В дополнение:
- end выравнивается по началу той строчки, где стоит соотв. begin
и соопр. кооментарием, к чему он end, если от соотв. begin он далее чем на 6-7 строчек...



 
sniknik   (2002-12-17 13:36) [16]

по мотивам MetalFan © (17.12.02 13:28)
обычно пишу похоже. вот так (только как этот стиль называется не знаю)

if somevar=something then begin
while somevar1<somevar2 do begin
//some code
end; //while
showmessage("sometext");
end; //if



 
MetalFan   (2002-12-17 13:37) [17]

пробелы вначале строк исчезли( поэтому не так красиво.


 
Ketmar   (2002-12-17 13:40) [18]

>MetalFan © (17.12.02 13:28)
склонен не согласиться, читабельность страдает. видите ли, совсем не всегда обязательно ставить begin. иногда его не пишут. следовательно, надо долго смотреть: а был ли мальчик? впрочем, это имхо...

Satanas Nobiscum! 17-Dec-XXXVII A.S.


 
LordOfSilence   (2002-12-17 15:04) [19]

if somevar=something then begin
while somevar1<somevar2 do begin
//some code
end; //while
showmessage("sometext");
end; //if

Присоединяюсь, сам пишу также. Если у ифоф и элсов нет своих
бегинов и эндов, то пишу так (по настроению):
if (условие)
then Правда()
else НеПравда();

Только вот комментарии практически не ставлю :(((
Наверно, теперь меня никуда на работу не возьмут? :)))


 
Игорь Шевченко   (2002-12-17 15:42) [20]

Ihor Osov"yak © (17.12.02 13:33)

Да, end выравнивается по операторы, в котором begin. Я достаточно долго на C программировал, оттуда этот стиль перенес на паскаль (его еще unix"овским называют, но изначально он от Кернигана-Ричи).
Комментарии к end - это мусор в программе. Длинные составные операторы использовать не рекомендуется за очень редким исключением, так что всегда видно, к какому оператору относится end. Про комментарии - вообще отдельный разговор, их надо писать исчерпывающе и они должны пояснять программу, а не отдельные операторы. Поэтому я против комментариев у end;
Впрочем, примеры моего стиля можно посмотреть здесь в кладовке и на "Королевстве Delphi" :-)))

С уважением,


 
Anatoly Podgoretsky   (2002-12-17 16:03) [21]

LordOfSilence © (17.12.02 15:04)
Если их нет то надо сделать и для единства стиля и для того что бы видеть где if кончается. Я бы это написао так.


if (условие) then
Правда()
else begin
НеПравда();
end;


в then begin не используется, что бы не загромаждать, а в else обязательно, что бы была закончена\ конструкция.


 
Ihor Osov'yak   (2002-12-17 16:13) [22]

2 Игорь Шевченко © (17.12.02 15:42)

> Длинные составные операторы использовать не рекомендуется за очень редким исключением,


Теоритически согласен, практически стараюсь следовать, но не всегда выходит, иногда из-за спешки, иногда из-за лени.. Поэтому и комментариии возле end... Но впрочем не всегда (для коротких)..


Зы, что меня максимально доставало в примерах от DDK, так это их длиннющие составные блоки.... В принцыпе на си их может и трудно избежать ввиду отсутствия вложенных процедур... На паскале я вложенные процедуры часто использую для "укорачивания" длинных блоков. Я конечно понимаю, что можно юзать "внешниe" процедуры - но проблемы с видимостью локальных переменных, которые не всегда хватает терпения и главное - времени обьединять в какие то структуры для эффективной передачи "внешним" процедурам... То есть я довольно часто пишу в несколько с "идиологической" точки зрения неряшливом стиле. Но для меня такой стиль понятен и через несколько лет будет (к примеру, недавно пришлось модифицировать паскалевский довольно большой проект шестилетней давности - никаких проблем с пониманием своих исходников). Хотя когда код предназначен для публики - тогда пытаюсь по максимуму зажимать такой стиль...

Зы - и если бы сватался к вам на работу, то такого слегка неряшливого кода Вы бы не увидели..




 
MsGuns   (2002-12-17 16:17) [23]

if OprKind<>"I" then
begin
if Platez.Vyp.Date>0 then
begin // Есть данные о выписке
frmPlatezka.bbtPlatToVyp.Enabled := false; // Запретить привязку
frmPlatezka.bbtPlatFromVyp.Enabled := true; // Разрешить отвязку
end
else
begin // Нет данных о выписке
frmPlatezka.bbtPlatToVyp.Enabled := true; // Разрешить привязку
frmPlatezka.bbtPlatFromVyp.Enabled := false; // Запретить отвязку
end;
frmPlatezka.chbPlatShowPrv.Enabled := true; // Разрешить перекл-е панели проводки
if frmPlatezka.chbPlatShowPrv.Checked then
begin // Включить панель проводки
frmPlatezka.pnPlatPrv.Visible := true;
ReCalcPlatezPrv;
if OprKind<>"V" then
frmPlatezka.grPlatProv.ReadOnly := false // Разрешить ред-ть проводку
else
frmPlatezka.grPlatProv.ReadOnly := true; // Запретить ред-ть проводку
end
else // Выключить панель проводки
frmPlatezka.pnPlatPrv.Visible := false;
end
else
begin
frmPlatezka.pnPlatPrv.Visible := false;
frmPlatezka.chbPlatShowPrv.Enabled := true; // Разрешить перекл-е панели проводки
frmPlatezka.bbtPlatToVyp.Enabled := true; // Разрешить привязку
end;


Пусть текст займет больше место в Pas (хотя сильно сомневаюсь, что разница большая), но каждый begin-end отдельным блоком с комментарием и отступами


 
Ketmar   (2002-12-17 16:21) [24]

комментарии к end - однозначно мусор. у меня colorer подсвечивает соотв. begin, потому все видно. заодно и стимул делать составные операторы небольшими - чтобы влызило на страницу %-)

Satanas Nobiscum! 17-Dec-XXXVII A.S.


 
Игорь Шевченко   (2002-12-17 16:22) [25]

Ihor Osov"yak © (17.12.02 16:13)


>В принцыпе на си их может и трудно избежать ввиду отсутствия >вложенных процедур...


На C++ их легче избежать, используя методы классов :-)

А что касается лени - так все мы ленивые :-)))
Я понимаю, что надо все описывать, но часто некогда и лень :-)))

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

С уважением,


 
cyborg   (2002-12-17 16:23) [26]

В общем спор идёт писать begin сразу после then или со следующей строки?
Я пишу на следующей.


 
LordOfSilence   (2002-12-17 16:31) [27]

2 Anatoly Podgoretsky © (17.12.02 16:03)

Так что же? Я правильно понимаю, что, если исходить из этой логики,
при одном-единственном if (без else"ов) тоже надо употреблять свои
операторные скобки? Ну типа

if (условие) then begin
ТолькоПравда()
end;

Скорее всего я бы так никогда не "написао".
Хотя, вкус и цвет - повод для драки :-)))


 
vuk   (2002-12-17 16:33) [28]

Мой типичный исходник:
http://delphibase.endimus.com/?action=viewfunc&topic=sysparams&id=10011


 
Карелин Артем   (2002-12-17 16:34) [29]

Пора наверно мне вставить свое ламерское слово: ежели сыр планируется только для моих глаз (ето работа №1), то там примерно как у MsGuns © (17.12.02 16:17), но без комментариев.
Есть 1 кусок строк на 50, в котором раньше было по 300 символов в строке; в процедурах может быть до 600 строк. Так это код для моих глаз, да и разбираться в нем могу только я. Это на всякий случай.
Работа №2 требует совместной работы. Там максимум 50 символов, кучка комментариев, процедуры маленькие и достаточно унифицированы.

begin пишу сразу после then :)


 
cyborg   (2002-12-17 16:34) [30]

В идеале мой код такой:


//==============================================//
//Обработка пришедших данных
procedure HandleSocket;
Var
Size : Integer;
begin
// LogStatus("Выполнение процедуры","HandleSocket");
//Получить пришедшие данные в Data
if Server then
Begin
Size := SDLNet_TCP_Recv(ClientSocket, @data, DataSize);
LogStatus("Получение данных в размере "+IntToStr(Size),"HandleSocket");
if Size <= 0 then //Если соединение потеряно
begin
SDLNet_TCP_DelSocket(Socketset, @ClientSocket^);
SDLNet_TCP_Close(ClientSocket);
ClientSocket:=Nil;
ClientActive:=False;
LogStatus("Соединение потеряно!","HandleSocket");
Exit;
end;
end else
Begin
Size := SDLNet_TCP_Recv(Socket, @data, DataSize);
LogStatus("Получение данных в размере "+IntToStr(Size),"HandleSocket");
if Size <= 0 then //Если соединение потеряно
begin
SDLNet_TCP_DelSocket(Socketset, @Socket^);
SDLNet_TCP_Close(Socket);
Socket:=Nil;
LogStatus("Соединение потеряно!","HandleSocket");
Exit;
end;
End;
HandleData;
end;


а обычный такой :) как здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1040071171&n=3



 
stone   (2002-12-17 16:35) [31]

if OprKind<>"V" then
frmPlatezka.grPlatProv.ReadOnly := false // Разрешить ред-ть проводку
else
frmPlatezka.grPlatProv.ReadOnly := true;

подобные блоки можно заменять

frmPlatezka.grPlatProv.ReadOnly := OprKind = "V";



 
Anatoly Podgoretsky   (2002-12-17 16:42) [32]

LordOfSilence © (17.12.02 16:31)
Да именно так бы я и написал, но мы же о вкусах


 
han_malign   (2002-12-17 17:18) [33]

Добавлю к тем кто ставит begin на одной строке с условием(и вообще строки экономит) -
if(x>y)then begin
end else begin
end;
- по аналогии с C всегда заключаю в скобки условия для if,while,until и чтобы не путаться в С со switche и переменную в case, а заодно и в with(когда компилятор позволяет, а то рекорд в скобках, в with становится константным(???))
- поскольку в for скобки не получится, иногда люблю извратиться с while, объединив инициализацию цикла и сам цикл(только в тривиальных циклах, которые уж никак не может потребоваться отлаживать):
i:=0;while((i<Length)and())do begin
.........
inc(i);
end;

а если совсем простой и короткий, то и так:
Result:=false;//поскольку относится не только к циклу на отдельной строке
i:=1;while((i<Length(s))and(not Result))do begin Result:=(s[i]=#0); inc(i);end;

и соответственно для инициализации 3-х локальных переменных - ну-уж никак не нужно 3-и строки
- для перебора значений неординального типа(коротких - иначе константный массив и цикл)или взаимоисключающих условий, делаю так(но это чисто каприз):

{>>>>>>} if()then begin
end else if()then begin
end else if()then begin
end else begin
end;
потому как лесенка иногда за страницу уходит, да и в глазах рябит.
З.Ы. Лишняя пара скобок еще никогда никому не вредила, конечно можно покичиться знанием порядка выполнения операций, но помимо ухудшения читабелности, иногда еще такие нелепые жуки вылезают.
З.З.Ы. Всегда, чисто рефлекторно, поправляю криво висящую картину или полотенце, по-этому - полчаса убью, но все выровняю:

Result:=(aNewState=tsTerminated)or(aNewState=tsWaitTape)or

((F_State=tsWaitTape )and(aNewState=tsScaning))or
//Idle states
((F_State=tsEmpty )and(aNewState in[tsWriting] ))or
((F_State=tsAvailable )and(aNewState in[tsValidating,tsReading] ))or
((F_State=tsReady )and(aNewState in[tsWriting,tsReading] ))or
((F_State=tsReadyR )and(aNewState in[tsReading] ))or
((F_State=tsReadyW )and(aNewState in[tsWriting,tsReady] ))or
//processing
((F_State=tsScaning )and(aNewState in[tsEmpty,tsAvailable,tsValidating]))or
((F_State=tsValidating)and(aNewState in[tsReady,tsWriting,tsTapeFull] ))or
((F_State=tsWriting )and(aNewState in[tsTapeFull,tsReady] ))or
((F_State=tsReading )and(aNewState in[tsAvailable,tsNeedNext] ));
- ну ломало меня таблицу переходов строить, да и, в идеале, Result всегда TRUE, это чисто для альфа версии.


 
han_malign   (2002-12-17 17:25) [34]

пойти что-ли на курса русского языка..., почитал "самописное" - аж стыдно стало, во всяком случае с орфографией у меня точно проблемма... :(((
З.Ы. Описки - не в счет.


 
Игорь Шевченко   (2002-12-17 17:28) [35]

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

В исходниках
MsGuns © (17.12.02 16:17)
мне, к примеру, разобраться трудно. Отчасти из-за того, что приходится переводить имена :-)))
Но, может, кому-то легко и просто :-)))

С уважением ко всем,


 
Anatoly Podgoretsky   (2002-12-17 17:31) [36]

О пристрастиях
if ... then begin end
else if ... then begin end
else if --- then begin end
else begin end;
// end;

с begin или без, безразницы, ступеньки тоже нет и перечисление одно порядка на одном уровне.
в некоторых языках есть даже специальная форма elseif


 
LordOfSilence   (2002-12-17 17:39) [37]

2 Anatoly Podgoretsky © (17.12.02 17:31)
Точно! Даже в 1С есть :-)))


 
MegaVolt   (2002-12-17 18:40) [38]

Попробую и свой изврат добавить такого ещё не предлогали :)

if условие
then
begin
...
...
end
else
begin
...
...
end;


 
Ihor Osov'yak   (2002-12-17 19:12) [39]

Да, еще спорный момент.

Лично меня всегда бесит (и если есть возможность, я требую безговорочно избегать шедевров типа

frmPlatezka.grPlatProv.ReadOnly := false;

Ибо не должно волновать, как там контрол или фрейм именуется... Что мешает сделать свойство EnablePayment и соотв. было бы

frmPlatezka.EnablePayment := false;

Да, не спорю - немного больше работы при разработке формы, но код, юзающий форму становится намного понятнее и намного легше сопровождаемый... Еще, в делфи очень не правится то, что компоненты, размещеные в дизайн-тайме имеют глоюальную область видимости - и как следствие - провоцируют процитированній віше стиль...

2 MsGuns, без обид, у Вас еще более - менее почти идеал, а мне приходилось видеть конструкцию из трех фреймов один в одном и запрет бутончика через "форму", типа
Form1.topFrame.InnerFrame.LowerFrame.btEdit.Enabled := false;
Form1.topFrame.InnerFrame.LowerFrame.btAdd.Enabled := false;

чел даже with поюзать не удосужился, не говоря уже о пропертях ... :-( (сишник он, по его определению.. :-)

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


PS MsGuns, я не из того поколения, что на html и xml "усе делает", в послужном списке есть несколько средних проектов масштаба предприятия вокруг учетных задач с десятками, а то и сотнями всяких формочек, отчетов в пределах одного арма, ну и с соотв. количеством обьектов в базе данных...








 
MsGuns   (2002-12-17 20:30) [40]

>Ihor Osov"yak © (17.12.02 19:12)
>frmPlatezka.EnablePayment := false;

Если у меня таких "переключателей в проекте с полторы сотни, чо, для каждого стандартного класса прописывать доп.свойстваи методы ? Тогда такая программа будет читаема разве что мастаками.
"Провокация" с использованием имен глобально, ИМХО, одно из достоинств ООП вообще, а Паскаля в частности. Пусть длинно, зато наглядно. Иначе давайте все будем писать что-то типа

Push Ax
Push Bx
Mov Ax,0FF0ABh
Mov Bx,Ax
Pop Ax

...

И на фига тогда объекты, свойства, методы и визуальные компоненты вообще ?


>Еще - очень раздражают имена от коверканных "русских" имен, >особенно если учесть, что кто-то их согласно английской >фонетике пишет

Да-а-а-леко не все знают английский язык в такой степени, чтобы перевести понятия "запись-проводки" и "операция-проводка" (а это не одно и то же, т.к. существуют сложные проводки) на английский язык. К тому же в английском языке я нашел только один первод на 3 абсолютно разных документа: "Платежное поручение в банк", "Платежная ведомость на зарплату" и "Кассовый расходный ордер", кои в бухгалтерском окружении именуются одним емким словом "Платежка". А мои проги читают и правят другие люди (сотрудники).

>PS MsGuns, я не из того поколения, что на html и xml "усе делает", в послужном списке есть несколько средних проектов масштаба предприятия вокруг учетных задач с десятками, а то и сотнями всяких формочек, отчетов в пределах одного арма, ну и с соотв. количеством обьектов в базе данных...

По-моему, и в воздухе не витало ничего подобного. Регулярно читаю твои посты и никаких сомнений в компетентности не возникло ни разу. Даже наоборот 8)))


С уважением.




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

Форум: "Потрепаться";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.009 c
1-15082
Kostik001
2002-12-22 07:58
2003.01.06
ComboBox с рисунками и проблемами


3-14891
Chrstniy
2002-12-11 22:58
2003.01.06
Запрос к бд через ADO в отдельном потоке


8-15173
timetrax
2002-09-16 22:22
2003.01.06
Чем просмотреть файлы *.RES???????


1-15039
MXA
2002-12-24 01:05
2003.01.06
OnCreate и OnActivate в Delphi7 CLX


4-15360
Iam
2002-11-19 11:38
2003.01.06
Получение текста любого окна...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский