Форум: "Потрепаться";
Текущий архив: 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