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

Вниз

Ненавижу разбирать чужие исходники !!!   Найти похожие ветки 

 
kronprince   (2002-12-11 11:17) [0]

За исключением исходников MBo (у которого сегодня ДР :).
Вот попался сегодня кусочек - зацените :)))

if (sum_t_154<>0) and (udt_Podst["kkp_154"]<>0) then
bal_154:=(sum_t_154-sum_f_154+sum_f_NB_154)*udt_Podst["kkp_154"]/sum_t_154*100;
if (sum_t_330<>0) and (udt_Podst["kkp_330"]<>0) then
bal_330:=(sum_t_330-sum_f_330+sum_f_NB_330)*udt_Podst["kkp_330"]/sum_t_330*100;

if nalich=0 then
begin
udt_work.close;
udt_work.SQL.Text:=
"INSERT INTO udt_balans "+
" (ved_no, sum_t_04, sum_t_6, sum_t_10, sum_t_35, sum_t_110, sum_t_154, sum_t_330,"+
" sum_f_04, sum_f_6, sum_f_10, sum_f_35, sum_f_110, sum_f_154, sum_f_330,"+
" bal_04, bal_6, bal_10, bal_35, bal_110, bal_154, bal_330,"+
" kkp_04, kkp_6, kkp_10, kkp_35, kkp_110, kkp_154, kkp_330, data,"+
" dbal_04, dbal_6, dbal_10, dbal_35, dbal_110, dbal_154, dbal_330)"+


 
stone   (2002-12-11 11:20) [1]

Отправь это Игорю Шевченко :)) он в последнее время к исходникам не равнодушен :))


 
Игорь Шевченко   (2002-12-11 11:24) [2]

stone © (11.12.02 11:20)

Не стоит :-)

У меня такого добра достаточно :-)))

С уважением,


 
Карелин Артем   (2002-12-11 11:25) [3]

Ну и что тут такого страшного??


 
Jeer   (2002-12-11 11:28) [4]

И так пишут, но лучше

if not tbSalary.DocExists(idnew) then
tbSalary.DocCopyFrom(iddoc);
tbSalary.DocOwner :=..
tbSalary.EndUpdate;


 
Кулюкин Олег   (2002-12-11 11:29) [5]

2 kronprince © (11.12.02 11:17)
Имена монстровые, а все остальное вполне стандартное.


 
Игорь Шевченко   (2002-12-11 11:34) [6]

Кулюкин Олег © (11.12.02 11:29)

Нет, прости. Это не программа. Это каменоломня из сна пьяного дворника.
В этом коде без 100 грамм разобраться невозможно.
Кстати, исходники с подобными кусками отсеиваются сразу (это к нашему разговору).


 
kronprince   (2002-12-11 11:48) [7]

У меня уже в глазах рябит от цифирок :((( - что делать ???
Застрелиться не советовать :)

2Кулюкин Олег © (11.12.02 11:29)
Этого вполне стандартного у мя щас 3825 строк :(
А вещь очень нужная - понять алгоритм


 
AlexKniga   (2002-12-11 11:58) [8]

2 kronprince

> А вещь очень нужная - понять алгоритм

Это кусок бугалтерской проги. Имена даны по номерам статей и графов. Эти номера стандартизированы, а читабельные имена были бы слишком длинные.


 
kronprince   (2002-12-11 12:09) [9]

2AlexKniga © (11.12.02 11:58)
Вообщето это энергетика а не бухгалтерия :-\

Заменил с на это:

// Для заполнения свойств DBGrid из массива. См. TData.FillColumns
TColumnDecription = record
case integer of
0: (FieldName, Caption :string[32]; SelColor :TColor; Width :integer;);
1: (Code, Name :string[32]; Color :TColor; F :integer;);// Бывший TFlag
end;{TColumnDecrpiption}
const
AFlag:array [TMAX_Category] of TColumnDecription =(
(Code:"04"; Name:"0.4 кВ";Color:clYellow; F:0),
(Code:"6"; Name:"6 кВ"; Color:clAqua; F:0),
(Code:"10"; Name:"10 кВ"; Color:clBlue; F:0),
(Code:"35"; Name:"35 кВ"; Color:clRed; F:0),
(Code:"110";Name:"110 кВ";Color:clSilver; F:0),
(Code:"154";Name:"154 кВ";Color:clFuchsia;F:0),
(Code:"330";Name:"330 кВ";Color:clGreen; F:0));

Теперь в одной компактной структуре и паре функций все монстрообразные операции


 
Johnny Smith   (2002-12-11 12:12) [10]

2kronprince © (11.12.02 11:48)
Этого вполне стандартного у мя щас 3825 строк :(
А вещь очень нужная - понять алгоритм

2Игорь Шевченко © (11.12.02 11:34)
Нет, прости. Это не программа
А кому легко?
Или вы впервые сталкиваетесь с примерами большого корпоративного софта? Там зачастую никакой элегантности нет и следа - ТОЛЬКО функциональность и ТОЛЬКО соответствие корпоративным правилам написания. А вот уж кто и как придумал эти правила (зачастую кривые по самое не хочу) - это другой вопрос.
Мне пришлось работать (слава Богу, недолго) в одной фирмочке, так вот приведенный код по сравнению с тамошним - выдержка из Кнута.


 
Игорь Шевченко   (2002-12-11 12:34) [11]

Johnny Smith © (11.12.02 12:12)


> Или вы впервые сталкиваетесь с примерами большого корпоративного
> софта? Там зачастую никакой элегантности нет и следа - ТОЛЬКО
> функциональность и ТОЛЬКО соответствие корпоративным правилам
> написания.


Я не впервые сталкиваюсь. Я его пишу. Немаленький и корпоративный софт. Работа в команде, уважаемый, подразумевает написание исходных текстов так, чтобы они были понятны остальным участникам. Здесь этим и не пахнет.


 
han_malign   (2002-12-11 12:45) [12]

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


 
Jeer   (2002-12-11 12:51) [13]

Так языки-то разные.
Паскаль намного легче читаем.
А свои же сишные исходники без комментария я через год просто не пойму:))


 
Darts   (2002-12-11 13:06) [14]

> Игорь Шевченко © (11.12.02 12:34)

У Вас очень интересный взгляд. То, что вы пишите, вы считаете самодостаточным и понятным для других. А тот код, который привел kronprince © (11.12.02 11:17) считаете абсолютно непонятным и верным кандидатом в корзину.

Не понял, ибо некорректно судить по куску коду, выдернутому из общей задачи. Монстрообразный? Возможно. Не все же умеют писать код, как Вы :) Люди бывают разные...

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

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


 
han_malign   (2002-12-11 13:10) [15]

Jeer © (11.12.02 12:51)
> Паскаль намного легче читаем.
Ма-а-а-аленький пример:
........
if(Result=ERROR_BEGINNING_OF_MEDIA)then begin // no closed DataSets
Result:=Seek(TAPE_SPACE_FILEMARKS,1);
if(Result=ERROR_NO_DATA_DETECTED)then begin// no Filemark( and DataSets) after Tape DBLK
Log(llProcess,"Unclosed Tape hdr");
Result:=Mark;
end{no Filemark(and DataSets) after Tape DBLK}
else begin// check first opened DataSet existing
Result:=CheckCompleteDblk(_dblk);
if(Result=NO_ERROR)then begin
if(_dblk<>MTF_SSET)then Result:=ERROR_INVALID_DATA
else begin
Log(llProcess,"Find single unclosed DataSet");
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end;
end
else
if(Result=ERROR_NO_DATA_DETECTED)then begin// now may writing new (first) data set
Result:=NO_ERROR;
F_nDSNum:=0;
end{ now may writing new (first) data set}
end;{ check opened DataSet existing}
end else if(Result=ERROR_FILEMARK_DETECTED)then begin// Check last blocks
Result:=CheckCompleteDblk(_dblk);
// For tape devices, with back filemark moving, tape move to filemark begin
if(Result=ERROR_NO_DATA_DETECTED)then Result:=ERROR_INVALID_DATA;
if(Result<>NO_ERROR)then begin
if(Result=ERROR_FILEMARK_DETECTED)then Result:=ERROR_INVALID_DATA;// double filemark not supported by Mtf
end else begin// Check last closed block
case(_dblk)of// valid closed blocs
MTF_ESET: F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
MTF_SSET: Move(F_pBB,__SSET,sizeof(__SSET));
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;
else Result:=ERROR_INVALID_DATA;// only SSET, ESET and EOTM may be separated by Filemark
end;{ case}
end;{ Check last closed block}
if(Result=NO_ERROR)then begin// Check last unclosed block if exist
Result:=Seek(TAPE_SPACE_FILEMARKS,1);// last Filemark must be exist
if(Result=NO_ERROR)then begin
Result:=CheckCompleteDblk(__dblk);
if(Result=ERROR_NO_DATA_DETECTED)then begin// Valid closed block without tail data
case(_dblk)of// Validate previous block
MTF_ESET: begin
Result:=NO_ERROR;// Valid closed ESET
Log(llProcess,"Find closed DataSet #"+intStr(MTF_ESET_DBLK((@F_pBB)^).DataSetNumber));
end;
MTF_SSET: begin// Valid, closed by Filemark, Data Set
Log(llProcess,"Find marked DataSet #"+intStr(MTF_SSET_DBLK((@F_pBB)^).DataSetNumber));
Result:=WriteESET(__SSET,false);
if(Result=NO_ERROR)then Result:=Mark;
end;
// All other case validated on previous step
end;{ case}
end{ Valid closed block without tail data}
else if(Result=NO_ERROR)then begin// Check unclosed block
case(__dblk)of// Validate unclosed block
MTF_ESET: begin
if(_dblk=MTF_SSET)then begin// Validate blocks queue
Log(llProcess,"Find unclosed End of Set #"+intStr(MTF_ESET_DBLK((@F_pBB)^).DataSetNumber));
// Tray close ESET block by filemark
F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then Result:=Mark;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;{ case}
MTF_SSET: begin
if(_dblk=MTF_ESET)then begin// Validate blocks queue
Log(llProcess,"Find unclosed DataSet #"+intStr(MTF_SSET_DBLK((@F_pBB)^).DataSetNumber));
// Try close aborted Data Set
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;// may not try close block by filemark because already EOTM
else Result:=ERROR_INVALID_DATA;
end;{ case}
end;{ Check unclosed block}
end;
end;{ Check last unclosed block if exist}
end;{ Check next to last block}
if(Result=NO_ERROR)then begin
F_MTFState:=F_MTFState+[tsContentValidated];
Result:=Seek(TAPE_SPACE_END_OF_DATA);
end;
if(Result<>NO_ERROR)then{**} Log(llError,"Validate Data Set -",Result);
end;end;{}



 
han_malign   (2002-12-11 13:11) [16]

Jeer © (11.12.02 12:51)
> Паскаль намного легче читаем.
Ма-а-а-аленький пример:
........
if(Result=ERROR_BEGINNING_OF_MEDIA)then begin // no closed DataSets
Result:=Seek(TAPE_SPACE_FILEMARKS,1);
if(Result=ERROR_NO_DATA_DETECTED)then begin// no Filemark( and DataSets) after Tape DBLK
Log(llProcess,"Unclosed Tape hdr");
Result:=Mark;
end{no Filemark(and DataSets) after Tape DBLK}
else begin// check first opened DataSet existing
Result:=CheckCompleteDblk(_dblk);
if(Result=NO_ERROR)then begin
if(_dblk<>MTF_SSET)then Result:=ERROR_INVALID_DATA
else begin
Log(llProcess,"Find single unclosed DataSet");
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end;
end
else
if(Result=ERROR_NO_DATA_DETECTED)then begin// now may writing new (first) data set
Result:=NO_ERROR;
F_nDSNum:=0;
end{ now may writing new (first) data set}
end;{ check opened DataSet existing}
end else if(Result=ERROR_FILEMARK_DETECTED)then begin// Check last blocks
Result:=CheckCompleteDblk(_dblk);
// For tape devices, with back filemark moving, tape move to filemark begin
if(Result=ERROR_NO_DATA_DETECTED)then Result:=ERROR_INVALID_DATA;
if(Result<>NO_ERROR)then begin
if(Result=ERROR_FILEMARK_DETECTED)then Result:=ERROR_INVALID_DATA;// double filemark not supported by Mtf
end else begin// Check last closed block
case(_dblk)of// valid closed blocs
MTF_ESET: F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
MTF_SSET: Move(F_pBB,__SSET,sizeof(__SSET));
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;
else Result:=ERROR_INVALID_DATA;// only SSET, ESET and EOTM may be separated by Filemark
end;{ case}
end;{ Check last closed block}
if(Result=NO_ERROR)then begin// Check last unclosed block if exist
Result:=Seek(TAPE_SPACE_FILEMARKS,1);// last Filemark must be exist
if(Result=NO_ERROR)then begin
Result:=CheckCompleteDblk(__dblk);
if(Result=ERROR_NO_DATA_DETECTED)then begin// Valid closed block without tail data
case(_dblk)of// Validate previous block
MTF_ESET: begin
Result:=NO_ERROR;// Valid closed ESET
Log(llProcess,"Find closed DataSet #"+intStr(MTF_ESET_DBLK((@F_pBB)^).DataSetNumber));
end;
MTF_SSET: begin// Valid, closed by Filemark, Data Set
Log(llProcess,"Find marked DataSet #"+intStr(MTF_SSET_DBLK((@F_pBB)^).DataSetNumber));
Result:=WriteESET(__SSET,false);
if(Result=NO_ERROR)then Result:=Mark;
end;
// All other case validated on previous step
end;{ case}
end{ Valid closed block without tail data}
else if(Result=NO_ERROR)then begin// Check unclosed block
case(__dblk)of// Validate unclosed block
MTF_ESET: begin
if(_dblk=MTF_SSET)then begin// Validate blocks queue
Log(llProcess,"Find unclosed End of Set #"+intStr(MTF_ESET_DBLK((@F_pBB)^).DataSetNumber));
// Tray close ESET block by filemark
F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then Result:=Mark;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;{ case}
MTF_SSET: begin
if(_dblk=MTF_ESET)then begin// Validate blocks queue
Log(llProcess,"Find unclosed DataSet #"+intStr(MTF_SSET_DBLK((@F_pBB)^).DataSetNumber));
// Try close aborted Data Set
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;// may not try close block by filemark because already EOTM
else Result:=ERROR_INVALID_DATA;
end;{ case}
end;{ Check unclosed block}
end;
end;{ Check last unclosed block if exist}
end;{ Check next to last block}
if(Result=NO_ERROR)then begin
F_MTFState:=F_MTFState+[tsContentValidated];
Result:=Seek(TAPE_SPACE_END_OF_DATA);
end;
if(Result<>NO_ERROR)then{**} Log(llError,"Validate Data Set -",Result);



 
han_malign   (2002-12-11 13:13) [17]

Jeer © (11.12.02 12:51)
> Паскаль намного легче читаем.
Ма-а-а-аленький пример:
........
if(Result=ERROR_BEGINNING_OF_MEDIA)then begin // no closed DataSets
Result:=Seek(TAPE_SPACE_FILEMARKS,1);
if(Result=ERROR_NO_DATA_DETECTED)then begin// no Filemark( and DataSets) after Tape DBLK
Result:=Mark;
end{no Filemark(and DataSets) after Tape DBLK}
else begin// check first opened DataSet existing
Result:=CheckCompleteDblk(_dblk);
if(Result=NO_ERROR)then begin
if(_dblk<>MTF_SSET)then Result:=ERROR_INVALID_DATA
else begin
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end;
end
else
if(Result=ERROR_NO_DATA_DETECTED)then begin// now may writing new (first) data set
Result:=NO_ERROR;
F_nDSNum:=0;
end{ now may writing new (first) data set}
end;{ check opened DataSet existing}
end else if(Result=ERROR_FILEMARK_DETECTED)then begin// Check last blocks
Result:=CheckCompleteDblk(_dblk);
// For tape devices, with back filemark moving, tape move to filemark begin
if(Result=ERROR_NO_DATA_DETECTED)then Result:=ERROR_INVALID_DATA;
if(Result<>NO_ERROR)then begin
if(Result=ERROR_FILEMARK_DETECTED)then Result:=ERROR_INVALID_DATA;// double filemark not supported by Mtf
end else begin// Check last closed block
case(_dblk)of// valid closed blocs
MTF_ESET: F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
MTF_SSET: Move(F_pBB,__SSET,sizeof(__SSET));
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;
else Result:=ERROR_INVALID_DATA;// only SSET, ESET and EOTM may be separated by Filemark
end;{ case}
end;{ Check last closed block}
if(Result=NO_ERROR)then begin// Check last unclosed block if exist
Result:=Seek(TAPE_SPACE_FILEMARKS,1);// last Filemark must be exist
if(Result=NO_ERROR)then begin
Result:=CheckCompleteDblk(__dblk);
if(Result=ERROR_NO_DATA_DETECTED)then begin// Valid closed block without tail data
case(_dblk)of// Validate previous block
MTF_ESET: begin
Result:=NO_ERROR;// Valid closed ESET
end;
MTF_SSET: begin// Valid, closed by Filemark, Data Set
Result:=WriteESET(__SSET,false);
if(Result=NO_ERROR)then Result:=Mark;
end;
// All other case validated on previous step
end;{ case}
end{ Valid closed block without tail data}
else if(Result=NO_ERROR)then begin// Check unclosed block
case(__dblk)of// Validate unclosed block
MTF_ESET: begin
if(_dblk=MTF_SSET)then begin// Validate blocks queue
// Tray close ESET block by filemark
F_nDSNum:=MTF_ESET_DBLK((@F_pBB)^).DataSetNumber;
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then Result:=Mark;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;{ case}
MTF_SSET: begin
if(_dblk=MTF_ESET)then begin// Validate blocks queue
// Try close aborted Data Set
Result:=Seek(TAPE_SPACE_END_OF_DATA);
if(Result=NO_ERROR)then begin
Result:=Mark;
if(Result=NO_ERROR)then Result:=WriteEset(MTF_SSET_DBLK((@F_pBB)^),true);
if(REsult=NO_ERROR)then Result:=Mark;
end;
end else Result:=ERROR_INVALID_DATA;// Invalid block queue
end;
MTF_EOTM: Result:=ERROR_END_OF_MEDIA;// may not try close block by filemark because already EOTM
else Result:=ERROR_INVALID_DATA;
end;{ case}
end;{ Check unclosed block}
end;
end;{ Check last unclosed block if exist}
end;{ Check next to last block}
if(Result=NO_ERROR)then begin
F_MTFState:=F_MTFState+[tsContentValidated];
Result:=Seek(TAPE_SPACE_END_OF_DATA);
end;



 
han_malign   (2002-12-11 13:14) [18]

Черт..., опять сглюкнуло


 
Игорь Шевченко   (2002-12-11 13:19) [19]


> Важно то, чтобы код работал. А оптимизацией могут заниматься
> другие.


За такой подход, простите, надо сразу увольнять :-)


 
Jeer   (2002-12-11 13:25) [20]

han_malign © (11.12.02 13:13)
Ну можно и на избыточном естественном языке сказать так, что ничего не поймешь. Примеров тут масса пробегает:)
Что говорить об искусственных..


 
vopros   (2002-12-11 13:26) [21]

Мне понравился код.


 
Кулюкин Олег   (2002-12-11 13:29) [22]

2 Игорь Шевченко © (11.12.02 13:19)
>> Важно то, чтобы код работал. А оптимизацией могут заниматься
>> другие.
> За такой подход, простите, надо сразу увольнять :-)
Сразу нельзя.
Сначала надо заставить привести код в божеский вид.
Не оптимизировать, а структурировать.

А потом выгонять :)))



 
Jeer   (2002-12-11 13:34) [23]

han_malign © (11.12.02 13:13)

По поводу примера же - так я писать бы не стал.


 
Darts   (2002-12-11 13:37) [24]

> Игорь Шевченко © (11.12.02 13:19)

Игорь, скажите честно, мог ли автор переделать основательно код? Сомневаюсь. Я этой задачей, к сожалению, иногда занимаюсь.


 
han_malign   (2002-12-11 14:03) [25]

2 Jeer ©
На самом деле комментарии вида
procedure Proc;
begin
with pRec do begin
............
Case dwError of
............
end;{Case dwError}
............
end;{with pRec}
end;{Proc}

- сильно упрощают жизнь даже на стадии написания, особенно если блок в страницу не влезает.
З.Ы. Еще очень полдезная вещь венгерская нотация, правда в Delphi приходится идти на компромис с Борландовской нотацией, например F_dwLastError: DWORD; вместо FLastError или m_dwLastError.


 
Игорь Шевченко   (2002-12-11 14:26) [26]

Darts (11.12.02 13:37)

Я, к сожалению, тоже иногда этой задачей занимаюсь. Переделкой как своего кода (реже), так и чужого (увы, чаще).
Автора можно было попросить (заставить, вынудить) переделать код по некоему образцу. По крайней мере, в моей практике такие случаи были.


 
Jeer   (2002-12-11 14:36) [27]

{Case dwError}
Насчет этого вообще возражений нет.
Всегда пользовался, а CodeRush еще и сам подставляет, хотя и навязчив несколько бывает:)
С венгерской нотацией дружу давно - хотя многие сегодня ее не принимают. Дело привычки скорее уже.


 
NailS   (2002-12-11 14:59) [28]


> Еще очень полдезная вещь венгерская нотация


Очень спорное замечание.


 
Darts   (2002-12-11 15:15) [29]

> Игорь Шевченко © (11.12.02 14:26)

Те программисты, которые писали этот код - не было, уволились. Приходилось и приходится править чужие исходники. Некоторыми кусками кода можно восхищаться и брать на заметку, некоторыми - просто умолчу.

Свои тоже правлю. К счастью, редко.

Идеального кода не бывает.


 
kronprince   (2002-12-11 15:39) [30]

2Господам, говорящим о работоспособности кода

Я не спорю, код работает, и может быть даже хорошо :)
Согласен что код

A[0] := 0;
A[1] := 1;
A[2] := 2;
A[3] := 3;

работает наверняка быстрее чем

for i:=0 to 3 do A[i]:=i; // Заполнение массива индексов

- но не в этом ведь проблема - проблема в скорости переделки, когда встречаешься с такими участками программы :(((
- когда у тя процедура на 3-4 страницы сплошь покрыта цифирками :(((


 
Игорь Шевченко   (2002-12-11 15:46) [31]

Darts (11.12.02 15:15)


> Приходилось и приходится править чужие исходники.


Почему-то авторы при этом поминаются далеко не лестными словами :-)


> Идеального кода не бывает.


С этим спорить невозможно :-)



 
han_malign   (2002-12-11 15:56) [32]

kronprince © (11.12.02 15:39)
const A: array[0..3]of double=(0,1,2,3);
а для векторов move(B,A,sizeof(A));
- и по коду и по времени компактнее, так что на самом деле, даже скорость не отмазка что-бы заполнять "3-4 страници цифирками".
З.Ы. Для векторных вычислений конечно все равно цикл, но лишний инкремент для процессоров выполняющих по 5-9 операций за такт... . Опять таки время отладки и уверенность в корректности алгоритма...
Короче руки отрубать надо - ведь эти люди воруют наше время(и отнимают работу у квалифицированных специалистов).


 
han_malign   (2002-12-11 16:00) [33]

>> Идеального кода не бывает.
>
>
>С этим спорить невозможно :-)

program HelloWorld;
{$APPTYPE CONSOLE}
begin
Writeln("Hello World!!!");
end;
:))))))))


 
Darts   (2002-12-11 16:09) [34]

> han_malign © (11.12.02 16:00)

Идеальнвй код - это ДНК


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

han_malign © (11.12.02 16:00)

Это - идеальный код не приносящий никакой практической пользы.

:-)))


 
han_malign   (2002-12-11 16:15) [36]

Игорь Шевченко © (11.12.02 16:13)
- вот и нашлось определение - что такое идеальный код :)))


 
LongIsland   (2002-12-11 16:37) [37]

"Разве это чушь? Видала я такую чушь, по сравнению с которой это чистая правда!" (с) Алиса в Стране Чудес (ну... или в Зазеркалье) :-)


 
Suntechnic   (2002-12-11 17:05) [38]

>Johnny Smith © (11.12.02 12:12)
> Или вы впервые сталкиваетесь с примерами большого корпоративного
> софта? Там зачастую никакой элегантности нет и следа - ТОЛЬКО
> функциональность и ТОЛЬКО соответствие корпоративным правилам
> написания.

Вот именно. Корпоративные правила написания. В любой уважающей себя конторе существуют code standarts. Это правила, которые рассказывают как писать код и сколько пробелов должно быть и где. Это касается не только Паскаля, но и другого любого языка программирования. Более того. Где то раз в 2 месяца проводятся code review с целью выяснения придерживаются ли программисты этого стандарта. Смею Вас уверить, что приведенный код не соответствуют ни одному виденному мной стандарту.


 
han_malign   (2002-12-11 17:18) [39]

>Корпоративные правила написания
- С++ STL от HP - в исходниках все внутрение(не интерфейсные) имена полей и методов имеют вид: A1,A2..An. Хотя, думаю, что это делалось только специально к релизу. Но реализация гораздо лучше чем в MS STL.


 
Mike B.   (2002-12-11 17:33) [40]

Мне как то раз пришлось дорабатывать программу, которая писалась в течение нескольких лет по меньшей мере тремя разными программистами, и ни один из этих паразитов не думал не только о своих возможных последствиях, но и похоже вообще не думал.
Написана эта дрянь была на Турбо Паскале.
Про модули похоже никто из них не знал - программа представляла из себя огромный массив сплошного, плохо форматированного текста и к началу моей работы над ней уже не могла даже скомпилироваться - памяти не хватало :-) Комментарии были местами, названия переменных и подпрограмм двух типов: один "разработчик", на зывал все переменные примерно так: X, X1, XX и т.д., другой, по крайней мере пытался делать что-то осмысленное(типа okno, pechat и т.п)
В тех местах где по логике вещей должны были быть динамические струтктуры, применялись массивы огромной размерности (чтоб хватило :-), вместо записей несколько массивов, как бы связанных между собой общим индексом.
При ближайшем рассмотрении выяснилось, что куча кода просто дублируется, ну и т.д. В общем можно было брать ее и нести студентам - показывать как не надо писать программы.
А мне эту гадость нужно было дополнить новыми возможностями в предельно сжатые сроки :-)
В общем у меня были веселые три недели, и если я когда нибудь встречусь с авторами, то просто убью их голыми руками.


 
Romkin   (2002-12-11 17:44) [41]

Всего три?! Это мало ;-)


 
han_malign   (2002-12-11 17:45) [42]

Mike B. © (11.12.02 17:33)
- случаем не POSM??? правда к этому чуду проложило руки гораздо больше народа, включая: ассемблериста, которого заставили писать на ООП; реального кодокопателя(иногда по ошибке называют хакерами); генерального директора; да и без меня не обошлось...


 
Mike B.   (2002-12-11 17:49) [43]

> Romkin ©
Зато какие :-)
han_malign ©
Нет :-) Даже не знаю что такое POSM. Программа была для сбора и обработки данных с измерительных устройств


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

Аналогичный случай был в Тамбове. Три программиста писали три разных части проекта. Каждый знал про ООП и про наследование форм. В результате получилось три иерархии форм. Надо ли говорить, что 80 процентов кода в каждой решали одну и ту же задачу, но каждый с набором своих вывертов, с другими абсолютно несовместимо. В проекте около 100000 строк.


 
han_malign   (2002-12-11 17:56) [45]

Mike B. © (11.12.02 17:49)
POSM(ПОСМ) - пакет обработки сигналов модифицированный (с)НПП Мера
предыдущая версия ПОС
я под ПОСМ рекордер/магнитограф писал, с возможностью подключения мониторинговых примочек


 
Mike B.   (2002-12-11 17:57) [46]

> Игорь Шевченко ©
О чем вы говорите, какое ООП! Например тот кто разработывал интерфейс пробелему описания окон решил таким образом. Завел несколько массивов, типа таких: okna, cvet_fona, cvet_teksta и т.д. по всем "свойствам" этих окон, размером тысяч в десять элементов, а потом надо создать окно - в первый пишет его номер, во второй по тому же индексу цвет фона и т.д и так с ними работает - надо окошко открыть/закрыть идет по всем этим массивам, выбирает характеристики окон и в нужном порядке все перерисовывает - в общем чудо, а не программа


 
Ketmar   (2002-12-11 18:27) [47]

мда... какие вы ужасы рассказываете... а я их на ночь читаю %-)
а идеально написанный код - это мой. правда, через 3 дня я в своем коде уже ничего не понимаю, но это же не важно? %-) ну чем, например, плохо название переменной ahirotry43? сразу понятно, что она используется только в for"ах.

а если серьезно - вот сейчас работаю с человеком, который вообще не признает локальных переменных. как факт. мотивирует тем, что "глобальные - быстрее". 3.1415926ец. не дай демоны мне когда-то придется его исходники ковырять... а сделать ничего не могу - не начальник я. хотя, видимо, стоит поднять вопрос о стандартизации кода. внутри моей команды (Piranha) такой недавно поднялся, в итоге пришли к Borland-Style для оформления (+ немножко от Кармака), некоторым стандартизованным именам переменных (для циклов, например), стандартным комментариям в начале модулей и ты ды... надо бы и на конторе такое предложить...

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


 
OlegMsc   (2002-12-11 18:54) [48]

Работал с парнем, который считал, что его стиль - экстремальное программирование. При решении проблемы, предыдущий код не просматривался, алгоритм не разбирался. Создавались новые процедуры, призванные решить только конкретную проблему, но зачастую, нарушавшие ход всего процесса. В результате, ошибки появлялись везде, где еще вчера все было гладко... После трех месяцев работы, вся команда дружно выпнула товарища в большой мир из тесного офиса.
P.S. Месяца три после этого проект работал, выдавая раз в час Access Violation...


 
Igorek   (2002-12-11 19:10) [49]

А как вам такой кусок?
Result := (i + (abs(i div c) + 1) * c) mod c;
;-)


 
Anatoly Podgoretsky   (2002-12-11 20:34) [50]

Result := I mod C, поскольку x * c mod c = 0


 
Игорь Шевченко   (2002-12-12 10:06) [51]

OlegMsc © (11.12.02 18:54)

О пользе экстремального программирования, однако :-)))
Не люблю я все, что связано со словом "экстремальный", пусть даже и программирование. Подсознательно...


 
Igorek   (2002-12-12 10:56) [52]


> Anatoly Podgoretsky © (11.12.02 20:34)

Вы не разобрались в скобках.
Result := (i + (abs(i div c) + 1) * c) mod c;
т.е. (i + x*c) mod c



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

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

Наверх





Память: 0.62 MB
Время: 0.009 c
6-99214
Romych
2002-11-01 10:51
2002.12.30
сокеты


14-99293
3D-Dragon
2002-12-09 15:04
2002.12.30
Работа для СПЕЦИАЛИСТА ! Срочно! Delphi_7 + FireBird


4-99403
Arkan
2002-11-12 18:50
2002.12.30
Посылка строки с переходом на следующую строку!


3-98980
volph7777
2002-12-09 12:23
2002.12.30
Сессии


1-99048
Balkon
2002-12-19 11:47
2002.12.30
SHBrowseForFolder и кнопарь New





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