Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

Примеры красивого кода   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.014 c
1-75927
NewEdik
2003-02-14 16:40
2003.02.24
Отступ в TComboBox


4-76229
Smok_er
2003-01-08 01:03
2003.02.24
ExtractIcon: или руки кривые, или глюки


1-75925
Door
2003-02-14 14:39
2003.02.24
Сообщение на форме


3-75822
zks
2003-02-06 12:52
2003.02.24
SQL выборка


14-76166
nikkie
2003-01-23 15:06
2003.02.24
Шахматный турнир