Форум: "Потрепаться";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Вниз
Примеры красивого кода Найти похожие ветки
← →
ZeroDivide (2003-02-06 15:45) [0]Я имею в виду что-то типа:
AgeOutOnPension := 60 - ord(сbSex.Checked)*5
Cужествует еще несколько красивых фокусов с использованием XOR, OR и AND.
Может кто знает чего? Напишите.
← →
down (2003-02-06 15:51) [1]
> AgeOutOnPension := 60 - ord(сbSex.Checked)*5
ужасный код ;)
← →
Mystic (2003-02-06 16:09) [2]ИМХО if гораздо читабельнее. Писать можно и так:
CopyResult := not ((((FileCount = 1) and ((GetFileAttributes(PChar(Files)) and FILE_ATTRIBUTE_DIRECTORY)<>0)) or (CreateDirectory(PChar(Destination), nil))) and (SHFileOperation (SHFileOpStruct) <> 0) and SHFileOpStruct.fAnyOperationsAborted);
только потом бригаду дешифровальщиков вызывать надо.
Вообще настощих извращений собственно два: это балет на льду и хоккей на траве.
← →
Игорь Шевченко (2003-02-06 16:44) [3]Mystic © (06.02.03 16:09)
> Вообще настощих извращений собственно два: это балет на
> льду и хоккей на траве.
И программирование на языке APL :-)
← →
stone (2003-02-06 16:47) [4]
> Вообще настощих извращений собственно два: это балет на
> льду и хоккей на траве.
Еще DialUp через IP-телефонию :))
← →
Феу (2003-02-06 16:56) [5]Сишный перл:
f && (x=a);
f || (x=b);
← →
VaS (2003-02-06 17:02) [6]Феу: абсолютно нормальный код. Серьезно.
← →
Владимир Васильев (2003-02-06 17:16) [7]> AgeOutOnPension := 60 - ord(сbSex.Checked)*5
Использовать визуальные элементы для хранения данных (даже временного) - плохая практика.
← →
Shadow (2003-02-06 17:18) [8]
procedure Tmain.N1Click(Sender: TObject);
begin
if not OPD.Execute then Exit;
if FileExists(OPD.FileName) then
bg.Picture.LoadFromFile(OPD.FileName)
else N1Click(Self);
end;
← →
asafr (2003-02-06 17:24) [9]procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:="Hello, world!";
end;
← →
ZeroDivide (2003-02-06 17:31) [10]2Shadow © (06.02.03 17:18)
:) Да не полхо
← →
Palladin (2003-02-06 17:32) [11]
> asafr © (06.02.03 17:24)
:))
вот это я понимаю :)
Красота и ЭСТЕТИКА!! :)
> ZeroDivide © (06.02.03 15:45)
такие приемы усложняют чтение кода.
это конечно неплохо, но и мало оправдывает себя.
← →
Mystic (2003-02-06 17:39) [12]Вот еще пример: http://entries.the5k.org/1302/3dtomb.htm
<body id=B onkeydown=M[event.keyCode]=1 onkeyup=M[event.keyCode]=0 bgcolor=silver><center><font size=7><br><br></font><font face=verdana size=2><img src=t.gif height=28><p>SCORE:<b id=sc> HEALTH:<b id=he><p id=D style=width:304;height:96;margin:8;overflow:hidden></p> <a href="mailto:webmaster@p01.org?subject=3DTOMB">Mathieu "POП" HENRI</a></p></font></body>
<script>
W=Math;R=W.round;Q=W.random;H=5;I="<img style=position:absolute";for(w=38,E=[],M=[],S=F=k=0;F<255;)M[F++]=F&34?(Q()*9&8?0:46):0;for(;k<76;M[w]=M[32]=M[37]=M[40]=M[39]=0)D.innerHTML+=I+";width:4;height:4608;left:"+4*k+++" src=w.gif>";E[0]=new e(0,2);for(i=1;i<7;)E[i++]=new e(-1,2);E[7]=new e(0);E[8]=new e(0);E[9]=new e(0);E[10]=new e(1);E[11]=new e(1);E[12]=new e(1);TH=setInterval("up()",9)
function up(){B.style.backgroundColor="silver";if(!H)clearInterval(TH),alert("GAME OVER"),document.location.reload();F++;if(T=M[32])M[32]=0;A=E[0].A=(E[0].A+M[39]-M[37])&63;E[0].s=(M[w]-M[40])*2;E[0].go();a=W.cos(A/10);b=W.sin(A/10);U=E[0].x;V=E[0].y;for(i=-w;i<w;){c=a-b*i/w;d=b+a*i/w;z=W.sqrt(c*c+d*d);for(j=0;j++<N(U+j*c/z,V+j*d/z););C=D.childNodes[w+i++].style;C.top=-96*j;C.zIndex=47-j}for(i=1;i<E.length;){if((F>>2)&1){Z=E[i].Z;if(Z>3.2){E[i].A=(24+E[0].A)&63;if(E[i].t<0 && T)S++,E[i]=new e(E[i].t,E[i].s,1)}if(Z>3.5){if(!E[i].t)S+=3;if(E[i].t>0 && H<5)H++;if(E[i].t<0)H--,E[0]=new e(0,2,1),B.style.backgroundColor="red";E[i]=new e(E[i].t,E[i].s,1)}E[i].A=(E[i].A+=(Q()*3)-1)&63;E[i].go()}x=E[i].x-U;y=E[i].y-V;X=y*a-x*b;Y=y*b+x*a;Z=4-W.sqrt(x*x+y*y)/32;if(Y<0 || Z<0)Z=0;E[i].Z=Z;c=E[i].t<0;f=c?(F>>3)&1:2;s=c?(E[i].A-8-E[0].A)&48:E[i].t;SP( D.childNodes[76+i++], w*4+(w+8)*Z*X/16, 48, s, f, Z )}SP( D.childNodes[76], w*4,48,32+T*16,2,4);sc.innerHTML=S;he.innerHTML=H}
function N(u,v){return M[(u>>4)+(v&240)]}
function SP(I,x,y,a,f,z){a*=z;f*=24*z;with(I.style){width=64*z;height=72*z;left=x-a-8*z;top=y-f-12*z;clip="rect("+R(f)+" "+R(a+16*z)+" "+R(f+24*z)+" "+R(a)+")";zIndex=24*z-48}}
function e(t,s,b){do{this.x=Q()*255;this.y=Q()*255}while(!N(this.x,this.y));this.A=this.Z=0;this.s=s;this.t=t*16;this.go=ge;if(!b)D.innerHTML+=I+" src=m.gif>"}
function ge(){u=(this.x+W.cos(this.A/10)*this.s)&255;v=(this.y+W.sin(this.A/10)*this.s)&255;if(N(u,v))this.x=u,this.y=v}
</script>
← →
ZeroDivide (2003-02-06 17:46) [13]2Mystic © (06.02.03 17:39)
Я просил примеры красивого кода. Через жопу это что красиво?
← →
Palladin (2003-02-06 17:51) [14]когда то я работал в 6-7 паскале под DOS :)
может что то типа этого сюда подойдет...
function CyrUpChar(c:char):char;
begin
if (ord(s[i])>=224) then CyrUpChar:=chr(ord(s[i])-32)
else CyrUpChar:=UpChar(s[i]);
end;
← →
Palladin (2003-02-06 17:52) [15]упс
s[i] is c
← →
uw (2003-02-06 18:03) [16]
type
TRec1 = record
a, b: Integer;
end;
TRec2 = record
a: Integer;
r: TRec1;
end;
var
r2: TRec2;
begin
with r2, r do begin
a := 4;
b := 5;
end;
end;
← →
uw (2003-02-06 18:13) [17]
j := 1;
while a[j] < 7 do begin
...
Inc(j);
end;
for j := j to 17 do begin
...
end;
← →
Дмитрий К.К. (2003-02-06 18:27) [18]А мне нравятся вот такие вещи:
ZeroDivide := not ZeroDivide;
:)))
← →
Andrey (2003-02-06 18:38) [19]if done then Ok;
if was then what;
if will then when;
if die then why;
← →
Mystic (2003-02-06 18:56) [20]> примеры красивого кода.
Для меня красивый код прежде всего красивый алгоритм (75%) плюс его оформление (25%)
Записи
AgeOutOnPension := 60 - ord(сbSex.Checked)*5
я всегда предпочту
if сbSex.Checked
then AgeOutOnPension := 55
else AgeOutOnPension := 60;
или напишу функцию iff
AgeOutOnPension := iff(сbSex.Checked, 55, 60);
Вот прийдут на фирму новые люди, и скажут им заменить значение cbSex.Caption с "женщина" на "мужчина". И помянут автора приведенной вами строчки "незлим тихим словом... (ц)"
← →
Shadow (2003-02-06 19:00) [21]
procedure TForm1.Button1Click(Sender: TObject);
var
inStr, fnStr, dist: string;
C,i: integer;
begin
C:=0;
inStr:="IRE";
fnStr:="sdfdsf IRE dfgdf iredfgd gdiredfg";
dist:=fnStr;
for i:=1 to length(fnStr) do
begin
if pos(AnsiUpperCase(inStr), AnsiUpperCase(dist))>0 then
begin
inc(C);
delete(dist, pos(AnsiUpperCase(inStr), AnsiUpperCase(dist)), length(inStr));
end else Break;
end;
ShowMessage(IntToStr(C));
end;
← →
алексей008 (2003-02-06 19:11) [22]a:=a-b;
b:=b+a;
a:=b-a;
или
a:=a xor b;
b:=a xor b;
a:=b xor a;
← →
Anatoly Podgoretsky (2003-02-06 19:35) [23]ZeroDivide © (06.02.03 17:46)
Так красиво же, а про место ты ничего не говорил, это ты потом мтал оправдываться.
← →
Jeer (2003-02-06 20:25) [24]Каждый из нас лишь выиграет, создавая время от времени «игрушечные» программы с заданными искусственными ограничениями, заставляющими нас до предела напрягать свои способности. ... Искусство решения мини-задач на пределе своих возможностей оттачивает наше умение для реальных задач.
Д. Кнут [1]
Рекомендую:
Уэзеpелл Ч. "Этюды для пpогpаммистов", М.: Миp, 1982
← →
Mihey (2003-02-06 22:17) [25]var A: array [1..10] of String;
...
c := A[4][4];
...
← →
Bananos (2003-02-07 01:29) [26]function AbolsheB(A, B: Integer): Boolean;
begin
Result := A > B
end;
лучше чем
function AbolsheB(A, B: Integer): Boolean;
begin
if A > B then
Result := True
else
Result := False
end;
← →
Alx2 (2003-02-07 09:13) [27]Shadow © (06.02.03 19:00)
Очень много излишеств в цикле
← →
ZeroDivide (2003-02-07 09:30) [28]2Mihey (06.02.03 22:17)
Действительно интересно. Опробовал. Матрица прописывается и без exception-ов Acsess Violation.
Написал:
var
A: array [1..10] of String =("1","2","3","4","5","6","7","8","9","10");
Z: Char = "w";
....
a[2][1] := "q";
Form1.Caption := Z;
И кепшн был "w". Хотя я надеялся, что он станет "q".
← →
Игорь Шевченко (2003-02-07 09:51) [29]Jeer © (06.02.03 20:25)
> Рекомендую:
> Уэзеpелл Ч. "Этюды для пpогpаммистов", М.: Миp, 1982
Присоединяюсь к рекомендации.
← →
Andrey (2003-02-07 10:55) [30]>ZeroDivide
Чеж тут интересного, просто к строке (string) можно обращатся как к масиву байт:
Result:=FloatToStr(SomeFloatVal);
if pos("," ,Result)>0 then Result[pos("," ,Result)]:=".";
Я такой код много раз писал когда надо было Result в SQL вставить (DecimalSeparator невсегда помогает).
if green then peace;
if good then live;
if bad then kill;
Question:=2b or not 2b;
А вообще пример красивого кода это VCL.
← →
cyborg (2003-02-07 11:24) [31]{$B+}
if not ((MY1 >= PY2) or (MX1 >= PX2) or (PY1 >= MY2) or (PX1 >= MX2) )
then
begin
Dec(TDataPlayer(PlayerSprite^.Data^).Life,TDataMonster(Sprite^.Data^).Power);
HealthNew:=True;
end;
{$B-}
← →
ZeroDivide (2003-02-07 13:11) [32]2Andrey © (07.02.03 10:55)
1.Обращение к матрице, хотя определен линейный массив. 2.Не знаю DecimalSeparator всегда мне помогал.
2Jeer © (06.02.03 20:25)/Игорь Шевченко © (07.02.03 09:51)
Ну уговорили. Наверное хорошая книжка. Приведите хоть один пример от туда "оригинального" кода.
← →
uw (2003-02-07 13:32) [33]>Andrey © (07.02.03 10:55)
Question:=2b or not 2b; // Не компилируется!
← →
Andrey (2003-02-07 14:10) [34]>uw
Даже Delphi неможет ответить на этот вопрос :)
> Обращение к матрице, хотя определен линейный массив
Маленькое уточнение, определен линейный массив строк (ShortString, AnsiString), а к элементу такой строки (символу (char)) можно обращатся по его адресу (смещению внутри строки).
Это еще у Тейксейры и Пачеко сказано
"Вы можете использовать AnsiString как массив."
очень стыдно но ничего лучше у себя ненашел
Читалка из DBF.
MaxRecInBuff:=BuffSize div RecSize;
...
if RecInBuff=0 then
begin
FillChar(Pointer(Buff)^, BuffSize, #32);
RecLoaded:=FileRead(h, Pointer(Buff)^, MaxRecInBuff*RecSize) div RecSize;
if RecLoaded<1 then Exit;
RecInBuff:=RecLoaded;
end;
Move(Pointer(Integer(Buff)+(RecLoaded-RecInBuff)*RecSize)^,
Pointer(LocalBuff)^,
RecSize);
Dec(RecInBuff);
← →
ZeroDivide (2003-02-07 14:31) [35]2uw © (07.02.03 13:32)
Question:=_2b or (not _2b)
← →
handra (2003-02-07 14:35) [36]ZeroDivide © (06.02.03 15:45)
Я имею в виду что-то типа:
AgeOutOnPension := 60 - ord(сbSex.Checked)*5
Cужествует еще несколько красивых фокусов с использованием XOR, OR и AND.
Может кто знает чего? Напишите.
Полная фигня, к тому же неверная. Возраст выхода на пенсию зависит от региона, условий работы, льгот, состояния здоровья и пр. В общем случае определяется персонально (как и размер пенсии) и должен быть атрибутом соответствующей сущности (персоны). =))
← →
ZeroDivide (2003-02-07 14:39) [37]handra © (07.02.03 14:35)
Согласен. Это просто пример КОДА.
← →
Mihey (2003-02-07 15:12) [38]type TSomeType = array [1..10] of String;
type TSomeOtherType = array [1..10] of TSomeType;
...
var a: array [1..10] of TSomeOtherType;
...
c := a[2][3][4][5];
...
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.009 c