Нестандартный стиль быдлокодера
От: Khimik  
Дата: 16.01.15 20:01
Оценка: -1 :))) :))) :))) :))
Я никогда не работал на работодателя, и у меня в ходе написания моей программы сформировался собственный стиль кода. Вот два фрагмента Delphi-кода моей программы:

case lowercase(curstrings[0])[1] of
'v': begin//Вектор
et:=vetOneArrow;
if curstrings.Count>7 then if lowercase(curstrings[7])='n' then et:=vetNoArrows;
if curstrings.Count>8 then begin
AddCustomVector(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),false,et,strtofloat(curstrings[8]),strtofloat(curstrings[9]),floatcolor(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),strtofloat(curstrings[13]));
end
else AddCustomVector(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),true,et,0,0,floatcolor(0,0,0),0);
end;//v
'p': begin//Плоскость
pltransp:=true;
if curstrings.Count>13 then if lowercase(curstrings[13])='n' then pltransp:=false;
if curstrings.Count>14 then begin
AddCustomPlane(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),vector(strtofloat(curstrings[7]),strtofloat(curstrings[8]),strtofloat(curstrings[9])),vector(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),false,floatcolor(strtofloat(curstrings[14]),strtofloat(curstrings[15]),strtofloat(curstrings[16])),strtofloat(curstrings[17]),pltransp);
end
else AddPlane(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),vector(strtofloat(curstrings[7]),strtofloat(curstrings[8]),strtofloat(curstrings[9])),vector(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),0,false);
end;//p
end;//case



for q:=0 to groups.Count-2 do begin
if not hasnums[q] then continue;
for w:=q+1 to groups.Count-1 do begin
if not hasnums[w] then continue;
if tpointgroup(groups[q]).Name<>tpointgroup(groups[w]).Name then continue;
if tpointgroup(groups[q]).GeneratorsCount<>tpointgroup(groups[w]).GeneratorsCount then continue;
curequal:=tpointgroup(groups[q]).MainOperationsEqual(tpointgroup(groups[w]));
if curequal then begin
//У двух групп одинаковые номера соответствия. Значит, одну из этих групп, у которой больше расхождение, следует удалить
if displvals[q]>displvals[w] then begin hasnums[q]:=false; break; end
else begin hasnums[w]:=false; continue; end;
end;//if
end;//next w
end;//next q


Здесь в браузере обрезаются строки, а так у меня в коде могут быть строки больше 500 символов.

Мои особенности стиля:
1) Нет стандартных пробелов в начале каждой строки.
2) Во многих местах стоят мелкие комментарии, например часто после end; — это может быть конец цикла, конец условного оператора и т.д., соответственно после end-а пишу //next x и т.п.
3) Довольно часто несколько операторов помещаются в одну строку, например какое-то действие и exit; или break;

Я одно время пытался перейти на стандартный стиль, но пришёл к выводу что мой собственный удобнее, по крайней мере для меня. Например, мне лень расставлять правильные пробелы в каждой строке; без этих пробелов возникает проблема, что иногда трудно различить, какому begin-у соответствует каждый end, и для решения этой проблемы после end-ов часто ставятся комментарии (next I, end if, end case и т.п.). Код, на мой взгляд, выглядит компактнее и удобнее для чтения, если во многих случаях в одну строку помещается много операторов (обычно вся такая строка выглядит как обособленный участок кода).


Пожалуйста не пинайте меня, профессиональные офисные программеры, лучше скажите – где-нибудь ещё может использоваться похожий стиль?

Убедительная просьба использовать специальные теги для оформления кода
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Отредактировано 18.01.2015 20:25 Mamut [ищите в других сетях] . Предыдущая версия .
Re: Нестандартный стиль быдлокодера
От: VladFein США  
Дата: 16.01.15 20:13
Оценка: +14 :))) :))) :))) :))
Здравствуйте, Khimik, Вы писали:

K>Пожалуйста не пинайте меня, профессиональные офисные программеры, лучше скажите – где-нибудь ещё может использоваться похожий стиль?


Надеюсь что нет.
Re: Нестандартный стиль быдлокодера
От: _NN_ www.nemerleweb.com
Дата: 16.01.15 20:13
Оценка: +2
Здравствуйте, Khimik, Вы писали:

Мое мнение, лучше длинные строки разбивать.
Неудобно бегать туда-сюда.
Обычно открываю два файла параллельно, тогда совсем трудно становится такой код читать.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Нестандартный стиль быдлокодера
От: Sinix  
Дата: 16.01.15 20:20
Оценка: +2 -1 :)))
Здравствуйте, Khimik, Вы писали:

K>Пожалуйста не пинайте меня, профессиональные офисные программеры, лучше скажите – где-нибудь ещё может использоваться похожий стиль?

Используется конечно. Обфускаторы примерно по тому же принципу работают


Если серьёзно, то коммерческий код должен покрывать ровно две цели:
1. Решать проблему заказчика.
2. После того, как выяснится, что код решает не ту проблему и не так, код правится без обращения к автору кода любым из разработчиков в команде. Даже если он видит этот код в первый раз.

Что-то я не уверен, что со вторым пунктом у вас всё ок.
Re[2]: Нестандартный стиль быдлокодера
От: elmal  
Дата: 16.01.15 20:56
Оценка: :))) :)
Здравствуйте, VladFein, Вы писали:

VF>Надеюсь что нет.

Зря надеешься. Код после обработки обфускаторами конечно читается получше чем этот, но все таки стиль очень похож. Топикстартеру просто браво, я думал я все в этой жизни видел, меня ничем не удивить, по в плане метрик WTF в коде этот шедевр переплюнуть просто нереально. Первое место просто — такой стиль перебил класс с двумя методами на 10000 строк со сплошными копипастами и мешаниной табов из пробелов и сбившимися отсупами, а это нужно умудриться. И это еще тривиальный код, я полагаю автор на средней задаче в состоянии развернуться гораздо круче, чем здесь показал.
Re[2]: Нестандартный стиль быдлокодера
От: Khimik  
Дата: 16.01.15 20:57
Оценка:
S>Если серьёзно, то коммерческий код должен покрывать ровно две цели:
S>1. Решать проблему заказчика.
S>2. После того, как выяснится, что код решает не ту проблему и не так, код правится без обращения к автору кода любым из разработчиков в команде. Даже если он видит этот код в первый раз.

S>Что-то я не уверен, что со вторым пунктом у вас всё ок.


А если код нужен только одному человеку (шароварщику)?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[3]: Нестандартный стиль быдлокодера
От: LaptevVV Россия  
Дата: 16.01.15 21:00
Оценка: +1
Здравствуйте, Khimik, Вы писали:

S>>Если серьёзно, то коммерческий код должен покрывать ровно две цели:

S>>1. Решать проблему заказчика.
S>>2. После того, как выяснится, что код решает не ту проблему и не так, код правится без обращения к автору кода любым из разработчиков в команде. Даже если он видит этот код в первый раз.

S>>Что-то я не уверен, что со вторым пунктом у вас всё ок.


K>А если код нужен только одному человеку (шароварщику)?

Тогда никаких проблем нет.
Пока ты пишешь только для себя — можно писать как угодно, лишь бы тебе самому было удобно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Нестандартный стиль быдлокодера
От: elmal  
Дата: 16.01.15 21:02
Оценка: +5 :)))
Здравствуйте, Khimik, Вы писали:

K>Мои особенности стиля:

K>1) Нет стандартных пробелов в начале каждой строки.
K>2) Во многих местах стоят мелкие комментарии, например часто после end; — это может быть конец цикла, конец условного оператора и т.д., соответственно после end-а пишу //next x и т.п.
K>3) Довольно часто несколько операторов помещаются в одну строку, например какое-то действие и exit; или break;
Здесь конечно сложно что то усовершенствовать, но я попробую. Советую имена переменных называть из смеси катайских, финских, иврита слов. Можно еще какие нидь языки всяких исчезнувших цивилизаций подключить. Не намного конечно, но будет еще круче. А, дельфя вроде юникод не поддерживает? Эххх, плохо. Ну, тогда эту смесь языков можно транслитом попробовать писать.
Re: Нестандартный стиль быдлокодера
От: vsb Казахстан  
Дата: 16.01.15 21:13
Оценка:
Такой стиль вряд ли где-то используется в "групповом" программировании.

Раньше был принят стандарт в ширину 80 символов практически во всех языках. Сейчас чуть побольше, но с другой стороны сейчас на всех языках код выглядит примерно одинаково в плане форматирования (отступы, пробелы между операторами и тд). И сейчас максимальная ширина кода всё равно ограничивается (самый популярный стиль, наверное, 120 символов).

Поэтому все профессиональные разработчики сейчас пишут примерно одинаково, в том числе и чтобы понимать друг друга. Необычные стили вроде приведённого могут встречаться либо у одиночек, либо в каких-то очень изолированных непрофессиональных коллективах.
Re[4]: Нестандартный стиль быдлокодера
От: VladFein США  
Дата: 16.01.15 21:14
Оценка: +9
Здравствуйте, LaptevVV, Вы писали:

LVV>Пока ты пишешь только для себя — можно писать как угодно, лишь бы тебе самому было удобно.


Есть мнение, что "ты сам" через пару лет — уже другой
Re: Нестандартный стиль быдлокодера
От: andy1618 Россия  
Дата: 16.01.15 21:14
Оценка: +1
Здравствуйте, Khimik, Вы писали:

Для начала: на RSDN есть средства подсветки кода:

case lowercase(curstrings[0])[1] of
'v': begin//Вектор
et:=vetOneArrow;
if curstrings.Count>7 then if lowercase(curstrings[7])='n' then et:=vetNoArrows;
if curstrings.Count>8 then begin
AddCustomVector(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),false,et,strtofloat(curstrings[8]),strtofloat(curstrings[9]),floatcolor(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),strtofloat(curstrings[13]));
end
else AddCustomVector(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),true,et,0,0,floatcolor(0,0,0),0);
end;//v
'p': begin//Плоскость
pltransp:=true;
if curstrings.Count>13 then if lowercase(curstrings[13])='n' then pltransp:=false;
if curstrings.Count>14 then begin
AddCustomPlane(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),vector(strtofloat(curstrings[7]),strtofloat(curstrings[8]),strtofloat(curstrings[9])),vector(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),false,floatcolor(strtofloat(curstrings[14]),strtofloat(curstrings[15]),strtofloat(curstrings[16])),strtofloat(curstrings[17]),pltransp);
end
else AddPlane(vector(strtofloat(curstrings[1]),strtofloat(curstrings[2]),strtofloat(curstrings[3])),vector(strtofloat(curstrings[4]),strtofloat(curstrings[5]),strtofloat(curstrings[6])),vector(strtofloat(curstrings[7]),strtofloat(curstrings[8]),strtofloat(curstrings[9])),vector(strtofloat(curstrings[10]),strtofloat(curstrings[11]),strtofloat(curstrings[12])),0,false);
end;//p
end;//case


for q:=0 to groups.Count-2 do begin
if not hasnums[q] then continue;
for w:=q+1 to groups.Count-1 do begin
if not hasnums[w] then continue;
if tpointgroup(groups[q]).Name<>tpointgroup(groups[w]).Name then continue;
if tpointgroup(groups[q]).GeneratorsCount<>tpointgroup(groups[w]).GeneratorsCount then continue;
curequal:=tpointgroup(groups[q]).MainOperationsEqual(tpointgroup(groups[w]));
if curequal then begin
//У двух групп одинаковые номера соответствия. Значит, одну из этих групп, у которой больше расхождение, следует удалить
if displvals[q]>displvals[w] then begin hasnums[q]:=false; break; end
else begin hasnums[w]:=false; continue; end;
end;//if
end;//next w
end;//next q
Re[2]: Нестандартный стиль быдлокодера
От: andy1618 Россия  
Дата: 16.01.15 21:26
Оценка:
Здравствуйте, andy1618, Вы писали:

A>Для начала: на RSDN есть средства подсветки кода...



Про длину строк: в крайнем проекте, который мы делали (Python, C++), пришли к ограничению в 120 символов из
соображений, что при мерджинге изменений в VCS строка должна два раза целиком умещаться на экран,
иначе просмотр диффа резко становится утомительным.

Про несколько операторов в одной строке: это плохо, т.к. невозможно ставить брейкпойнты (окно дизассемблера не в счёт).

Про комментарии в закрывающих end: вполне полезны, независимо от наличия/отсутствия отступов.

Ну и, в завершение, банальщина от М.Фаулера:
"Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку."
Re: Нестандартный стиль быдлокодера
От: jhfrek Россия  
Дата: 16.01.15 21:46
Оценка:
Здравствуйте, Khimik, Вы писали:

K>3) Довольно часто несколько операторов помещаются в одну строку, например какое-то действие и exit; или break;

K>Я одно время пытался перейти на стандартный стиль, но пришёл к выводу что мой собственный удобнее, по крайней мере для меня. Например, мне лень расставлять правильные пробелы в каждой строке; без этих пробелов возникает проблема, что иногда трудно различить, какому begin-у соответствует каждый end, и для решения этой проблемы после end-ов часто ставятся комментарии (next I, end if, end case и т.п.). Код, на мой взгляд, выглядит компактнее и удобнее для чтения, если во многих случаях в одну строку помещается много операторов (обычно вся такая строка выглядит как обособленный участок кода).

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

Мне всегда хочется убить подобных "экономистов", потому что ни брекпоинт не поставить, ни посмотреть как переменные меняются — каждая строчка как "черный ящик". Туда же идут любители процедур на несколько экранов. И любители if и циклов десятерной вложенности (отсутствие подобного г. заодно решит проблему с next I, end if, end case в комментариях)

ЗЫ. И почитайте что-нибудь современнее книжек прошлого века, когда обособляли макросами и цветными разделителями в стопке перфокарт. Обособленный участок кода — это отдельный метод, носящий понятное имя и принадлежащий правильному объекту.
Re[5]: Нестандартный стиль быдлокодера
От: LaptevVV Россия  
Дата: 16.01.15 21:48
Оценка: +1 :)
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, LaptevVV, Вы писали:


LVV>>Пока ты пишешь только для себя — можно писать как угодно, лишь бы тебе самому было удобно.


VF>Есть мнение, что "ты сам" через пару лет — уже другой

Шароварщик — это вряд ли.
ТС пишет же, что он НИКОГДА не работал программистом в конторе...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Нестандартный стиль быдлокодера
От: jhfrek Россия  
Дата: 16.01.15 22:02
Оценка: :)
Здравствуйте, elmal, Вы писали:

E>Зря надеешься. Код после обработки обфускаторами конечно читается получше чем этот, но все таки стиль очень похож. Топикстартеру просто браво, я думал я все в этой жизни видел, меня ничем не удивить, по в плане метрик WTF в коде этот шедевр переплюнуть просто нереально.


а вот хрен — func1(func2(func3(x), func4(x)*func5(y)), func6(z)?func7(x):func8(func2(x, y), z).... дальше мне лень писать, причем все это с осмысленными именами типа CalcSumIfFirstParmInRangeAndCoefIsGreaterThenSecondParam, в одну строчку при автоматическом переносе порождающее с десяток строк.

Или набор классов с конструкторами с несколькими десятками(!!!!!) параметров причем десяток последних — умолчальные
Re[3]: Нестандартный стиль быдлокодера
От: Vaako Украина  
Дата: 17.01.15 08:34
Оценка: +3
Здравствуйте, Khimik, Вы писали:

S>>Что-то я не уверен, что со вторым пунктом у вас всё ок.

K>А если код нужен только одному человеку (шароварщику)?

Поверь, через пару лет ты не захочешь лезть разбираться где ошибка в коде
Вот захочешь тут ковыряться, хотя и выглядит набмого читабельнее, но никакого желания и удовольствия искать ошибку не вызывает.
procedure TSeed2.Steim2;
var
  flag:boolean;
  i,j,X,Y,count,p:integer;
  ii:integer;
begin
  ClrD0;
  if NN>$19C9 then begin SeedInfo:='File garbled';exit;end;//Number of samples (6601max)
  beg:=(DI(44)shl 8)+DI(45); //Beginning of data
  j:=beg;//IN Byte count
  p:=0;    //OUT Byte count
  repeat
    i:=0;
    while i<16 do
    begin
      NIBBLE[i]:=  (DI(i div 4+j) and $C0) shr 6;
      NIBBLE[i+1]:=(DI(i div 4+j) and $30) shr 4;
      NIBBLE[i+2]:=(DI(i div 4+j) and $0C) shr 2;
      NIBBLE[i+3]:=(DI(i div 4+j) and $03);
      //form1.memo1.Lines.Add('Nibble['+inttostr(i)+']= '+inttostr(NIBBLE[i]));
      //form1.memo1.Lines.Add('Nibble['+inttostr(i+1)+']= '+inttostr(NIBBLE[i+1]));
      //form1.memo1.Lines.Add('Nibble['+inttostr(i+2)+']= '+inttostr(NIBBLE[i+2]));
      //form1.memo1.Lines.Add('Nibble['+inttostr(i+3)+']= '+inttostr(NIBBLE[i+3]));
      i:=i+4;//printf("%X ",j);getch();
    end;
    if(NIBBLE[0]=0)and(NIBBLE[1]=0)and(NIBBLE[2]=0)then
    begin
      flag:=true;//cout<<"+\n";
      DD[0]:=DI(j+4);DD[1]:=DI(j+5);DD[2]:=DI(j+6);DD[3]:=DI(j+7);
      D0[p]:=(DD[0] shl 24)+(DD[1] shl 16)+(DD[2] shl 8)+DD[3];//first  (real)
      p:=p+1;
    end else flag:=false;

    for i:=0 to 15 do
    begin
      case NIBBLE[i] of
      0: j:=j+4;
      1:begin
          DD[0]:=DI(j);  if(DI(j)  and $80)<>0 then DD[0]:=integer($FFFFFF00 or DI(j));
          DD[1]:=DI(j+1);if(DI(j+1)and $80)<>0 then DD[1]:=integer($FFFFFF00 or DI(j+1));
          DD[2]:=DI(j+2);if(DI(j+2)and $80)<>0 then DD[2]:=integer($FFFFFF00 or DI(j+2));
          DD[3]:=DI(j+3);if(DI(j+3)and $80)<>0 then DD[3]:=integer($FFFFFF00 or DI(j+3));
          D0[p]:=D0[p-1]+DD[0];
          if not(flag and(i=3))then p:=p+1  //skip first diff
          else if(p>1)and(p<=MAX_D0)then if ((D0[p-2]+DD[0])<>D0[p-1])
          then begin //info(2,'Error630 '+inttostr(D0[p-2]+DD[0])+' '+inttostr(D0[p-1]));X:=X+1;
          end;
          D0[p]:=D0[p-1]+DD[1];p:=p+1;
          D0[p]:=D0[p-1]+DD[2];p:=p+1;
          D0[p]:=D0[p-1]+DD[3];p:=p+1;
          j:=j+4;
        end;
      2:begin
          DD[0]:=DI(j);DD[1]:=DI(j+1);DD[2]:=DI(j+2);DD[3]:=DI(j+3);
          DD[0]:=(DD[0] shl 24)or(DD[1] shl 16)or(DD[2] shl 8)or DD[3];
          if((DI(j)and $C0)=$40)then
          begin    //dnib=01  (30)
            DD[1]:=DD[0]and $3fffffff;
            //if(DD[1] and $20000000)<>0 then DD[1] :=DD[1] or $C0000000;
            if(DD[1] and $20000000)<>0 then
              DD[1] := DD[1] or $C0000000;
            D0[p]:=D0[p-1]+DD[1];// printf("%x %X  ",DI[j-27],NIBBLE[6]);
            if(not(flag and (i=3)))then p:=p+1  //skip first diff
            else if p>1 then if((D0[p-2]+DD[1])<>D0[p-1])then
            begin
              //info(2,'Error646 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
              X:=X+1;
            end;
            j:=j+4;
          end else
          if((DI(j)and $C0)=$80)then    //dnib=10  (2*15)
          begin
            DD[1]:=(DD[0]shr 15)and $00007fff;if(DD[1]and $00004000)<>0 then DD[1]:=DD[1] or integer($ffff8000);
            D0[p]:=D0[p-1]+DD[1];
            if(not(flag and(i=3)))then p:= p+1  //skip first diff
            else if p>1 then if((D0[p-2]+DD[1])<>D0[p-1]) then
            begin
              //info(2,'Error657 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
              X:=X+1;
            end;
            DD[1]:=DD[0]and $00007fff;if(DD[1]and $00004000)<>0 then DD[1]:=DD[1]or integer($ffff8000);
            D0[p]:=D0[p-1]+DD[1];
            p:=p+1;
            j:=j+4;
          end else
          if((DI(j) and $C0)=$C0)then    //dnib=11  (3*10)
          begin
            DD[1]:=(DD[0]shr 20)and $000003ff;if(DD[1]and $00000200)<>0 then DD[1]:=DD[1] or integer($fffffC00);
            D0[p]:=D0[p-1]+DD[1];
            if(not(flag and(i=3)))then p:=p+1  //skip first diff
            else if(p>1) then if((D0[p-2]+DD[1])<>D0[p-1]) then
            begin
              //info(2,'Error671 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
              X:=X+1;
            end;
            DD[1]:=(DD[0]shr 10)and $000003ff;if(DD[1]and $00000200)<>0 then DD[1]:=DD[1]or integer($fffffC00);
            D0[p]:=D0[p-1]+DD[1];p:=p+1;
            DD[1]:=DD[0]and $000003ff;if(DD[1]and $00000200)<>0 then DD[1]:=DD[1]or integer($fffffC00);
            D0[p]:=D0[p-1]+DD[1];p:=p+1;
            j:=j+4;
          end;
    end;
      3:begin
          DD[0]:=DI(j);DD[1]:=DI(j+1);DD[2]:=DI(j+2);DD[3]:=DI(j+3);
          DD[0]:=(DD[0]shl 24)or(DD[1]shl 16)or(DD[2]shl 8)or DD[3];
          //printf(" ^%lx^ ",DD[0]);
          if((DI(j)and $C0)=$00)then    //dnib=00  (5*6)
          begin
            DD[1]:=(DD[0]shr 24)and $0000003f;if(DD[1]and $00000020)<>0
              then DD[1]:=DD[1]or integer($ffffffC0);
            D0[p]:=D0[p-1]+DD[1];
            if(not(flag and(i=3)))then p:=p+1  //skip first diff
            else if p>1 then if((D0[p-2]+DD[1])<>D0[p-1])then
              begin
                //info(2,'Error691 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
                X:=X+1;
              end;
            DD[1]:=(DD[0]shr 18)and $0000003f;if(DD[1]and $00000020)<>0
              then DD[1]:=DD[1]or integer($ffffffC0);
            D0[p]:=D0[p-1]+DD[1];p:=p+1;
            DD[1]:=(DD[0]shr 12)and $0000003f;if(DD[1]and $00000020)<>0
              then DD[1]:=DD[1]or integer($ffffffC0);
            D0[p]:=D0[p-1]+DD[1];p:=p+1;
            DD[1]:=(DD[0]shr 6)and $0000003f;if(DD[1]and $00000020)<>0
              then DD[1]:=DD[1]or integer($ffffffC0);
            D0[p]:=D0[p-1]+DD[1];p:=p+1;
            DD[1]:=(DD[0])and $0000003f;if(DD[1]and $00000020)<>0
              then DD[1]:=DD[1]or integer($ffffffC0);
            D0[p]:=D0[p-1]+DD[1];p:=p+1; //printf(" ^%lx^ ",DD[0]);
            j:=j+4;
          end else
          if((DI(j)and $C0)=$40)then    //dnib=01  (6*5)
          begin
            DD[1]:=(DD[0]shr 25)and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1];
            if(not(flag and(i=3)))then p:=p+1  //skip first diff
            else if(p>1)then if((D0[p-2]+DD[1])<>D0[p-1]) then
            begin
              //info(2,'Error710 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
              X:=X+1;
            end;
            DD[1]:=(DD[0]shr 20)and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 15)and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 10)and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 5)and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]    )and $0000001f;if(DD[1]and $00000010)<>0
              then DD[1]:=DD[1]or integer($ffffffE0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            j:=j+4;
          end else
          if((DI(j)and $C0)=$80)then    //dnib=10  (7*4) 0xC0 11***************
          begin
            DD[1]:=(DD[0]shr 24)and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1];
            if(not(flag and(i=3)))then p:=p+1  //skip first diff
            else if(p>1)then if((D0[p-2]+DD[1])<>D0[p-1])then
            begin
              //info(2,'Error731 '+inttostr(D0[p-2]+DD[1])+' '+inttostr(D0[p-1]));
              X:=X+1;
            end;
            DD[1]:=(DD[0]shr 20)and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 16)and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 12)and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 8)and $0000000f;if(DD[1]and $00000008)<>0 then
              DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]shr 4)and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            DD[1]:=(DD[0]    )and $0000000f;if(DD[1]and $00000008)<>0
              then DD[1]:=DD[1]or integer($fffffff0);
            D0[p]:=D0[p-1]+DD[1]; p:=p+1;
            j:=j+4;
          end;
      end;
      else begin
            //ERROR
            j:=j-(j-beg) mod 64;
            repeat
              for ii:=0 to 63 do //;i<64;i++,j++){ //skip bloks to find sinc
              begin
                if(ii mod 8)=0 then begin D0[p]:=0;p:=p+1;end;     //write Zeros
                j:=j+1;
              end;
              X:=X+1; //Add ERROR
                //printf("^%x^\n",j);
            until ((DI(j)and $FC)<>0) and (j<4032);   //nibble 0,1,2==0
            //i:=16;
            break;
          end;
      end;
    end;
  until not((j< SeedMax )and(p<NN));
  DD[0]:=DI(beg+8);DD[1]:=DI(beg+9);DD[2]:=DI(beg+10);DD[3]:=DI(beg+11);
  D0[p]:=(DD[0]shl 24)+(DD[1]shl 16)+(DD[2]shl 8)+DD[3];//last  (real)
  if(D0[p]=D0[p-1])then {info('OK '+inttostr(D0[p])+' '+inttostr(NN))}
  else
  begin
    //info(2,'Error771 '+inttostr(D0[p-1])+' <> '+inttostr(D0[p])+' ['+inttostr(X)+']');
    X:=X+1;
  end;
  Errors:=X;
end;
Re[2]: Нестандартный стиль быдлокодера
От: Sharowarsheg  
Дата: 17.01.15 19:33
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>когда напишите проект из хотя бы тысячи строк такого кода, вернитесь к нему через пару-тройку лет и попробуйте изменить и потом отладить.


Нафига? Пишите сразу хорошо.

J>А еще лучше найдите единомышленника с проектом на тысячу строк и попробуйте внести в его код изменения и их отладить.


Он же в шароваре — там только конкуренты, единомышленников нет.

J>Мне всегда хочется убить подобных "экономистов", потому что ни брекпоинт не поставить, ни посмотреть как переменные меняются — каждая строчка как "черный ящик". Туда же идут любители процедур на несколько экранов. И любители if и циклов десятерной вложенности (отсутствие подобного г. заодно решит проблему с next I, end if, end case в комментариях)


проблемы такого рода, с вложенными циклами и ветвлениями, решаются разбиением на мелкие процедуры, после чего возникает проблема слишком большого количества мелких процедур. Как раз не так давно занимались тут склеиванием кучи модулей в один.
Re[3]: Нестандартный стиль быдлокодера
От: jhfrek Россия  
Дата: 17.01.15 21:05
Оценка: +2
Здравствуйте, Sharowarsheg, Вы писали:

J>>когда напишите проект из хотя бы тысячи строк такого кода, вернитесь к нему через пару-тройку лет и попробуйте изменить и потом отладить.

S>Нафига? Пишите сразу хорошо.

человек написал сюда пост в защиту своего стиля, он не будет хорошо писать пока не прочувствует что писать плохо — это плохо

J>>А еще лучше найдите единомышленника с проектом на тысячу строк и попробуйте внести в его код изменения и их отладить.

S>Он же в шароваре — там только конкуренты, единомышленников нет.

зато есть компаньоны. Я на себя матерился даже из-за одного скрипта в сотню строк который я написал plain текстом без выделения констант и параметров, потому что скрипт должен был быть одноразовым. Через пару лет оказалось что нет. И, вместо 10 минут на корректировку, пришлось потратить несколько часов на вспоминание и внесение изменений.

S>проблемы такого рода, с вложенными циклами и ветвлениями, решаются разбиением на мелкие процедуры, после чего возникает проблема слишком большого количества мелких процедур. Как раз не так давно занимались тут склеиванием кучи модулей в один.


это только если они объединены в класс "TUtils" по принципу нам лень думать и рефакторить, а не разнесены по объектам которым они должны принадлежать. Ну или программист понял рефакторинг с выносом в метод буквально и каждую строчку обернул в метод, такое тоже видел
Re[4]: Нестандартный стиль быдлокодера
От: Sharowarsheg  
Дата: 17.01.15 21:31
Оценка:
Здравствуйте, jhfrek, Вы писали:

J>>>когда напишите проект из хотя бы тысячи строк такого кода, вернитесь к нему через пару-тройку лет и попробуйте изменить и потом отладить.

S>>Нафига? Пишите сразу хорошо.

J>человек написал сюда пост в защиту своего стиля, он не будет хорошо писать пока не прочувствует что писать плохо — это плохо


Ну у него не самый плохой стиль. Бывают, например, фабрики фабрик сервисов.

J>>>А еще лучше найдите единомышленника с проектом на тысячу строк и попробуйте внести в его код изменения и их отладить.

S>>Он же в шароваре — там только конкуренты, единомышленников нет.

J>зато есть компаньоны.


Не всегда. Я б даже сказал, что компаньоны скорее исключение, чем правило.

J>Я на себя матерился даже из-за одного скрипта в сотню строк который я написал plain текстом без выделения констант и параметров, потому что скрипт должен был быть одноразовым. Через пару лет оказалось что нет. И, вместо 10 минут на корректировку, пришлось потратить несколько часов на вспоминание и внесение изменений.


Не дешевле ли было придерживаться исходного предположения, что скрипт-таки одноразовый, и переписать?

S>>проблемы такого рода, с вложенными циклами и ветвлениями, решаются разбиением на мелкие процедуры, после чего возникает проблема слишком большого количества мелких процедур. Как раз не так давно занимались тут склеиванием кучи модулей в один.


J>это только если они объединены в класс "TUtils" по принципу нам лень думать и рефакторить, а не разнесены по объектам которым они должны принадлежать.


Ну или нет объектов вообще. Так тоже делают.
Re[5]: Нестандартный стиль быдлокодера
От: jhfrek Россия  
Дата: 17.01.15 21:44
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Ну у него не самый плохой стиль. Бывают, например, фабрики фабрик сервисов.


для таких заскоков его стиль, конечно, лучше — можно быстро причесать редактором и отрефакторить. Рефакторить фабрику фабрик сервисов, да если еще без тестов — ну его в ж.

J>>Я на себя матерился даже из-за одного скрипта в сотню строк который я написал plain текстом без выделения констант и параметров, потому что скрипт должен был быть одноразовым. Через пару лет оказалось что нет. И, вместо 10 минут на корректировку, пришлось потратить несколько часов на вспоминание и внесение изменений.

S>Не дешевле ли было придерживаться исходного предположения, что скрипт-таки одноразовый, и переписать?

дешевле было бы сразу написать нормально. А так что я на доделку пару часов потратил, что на написание заново потратил бы. С такими простыми случаями проблема скорее психологическая, когда думаешь что у тебя все есть, а оказывается что нефига.

А вот когда приходится копаться в сложном коде, на написание которого было потрачено пару месяцев, то приходится копаться, потому что написать заново — это опять же пара месяцев. Поэтому лучше сразу все сделать хорошо и модифицируемо.

Вообще, за свою программистскую практику, я понял что красота, оптимальность кода и прочее — это фигня, главное — поддерживаемость

S>>>проблемы такого рода, с вложенными циклами и ветвлениями, решаются разбиением на мелкие процедуры, после чего возникает проблема слишком большого количества мелких процедур. Как раз не так давно занимались тут склеиванием кучи модулей в один.

J>>это только если они объединены в класс "TUtils" по принципу нам лень думать и рефакторить, а не разнесены по объектам которым они должны принадлежать.
S>Ну или нет объектов вообще. Так тоже делают.

кто-то еще пишет в процедурном стиле? Вроде уже даже в школах процедурным языкам не учат
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.