Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
6-76055
Thomas Brandon
2003-01-05 14:44
2003.02.24
Дан вот такой заголовок TCP-пакета...


7-76212
izyum
2002-12-20 14:52
2003.02.24
События клавиатуры


1-75857
ДмитрийК.
2003-02-13 10:53
2003.02.24
Уважаемые мастера, есть два вопроса


3-75807
JB
2003-02-06 13:35
2003.02.24
Базы и локальная сеть


3-75801
Yuraz
2003-02-04 19:49
2003.02.24
Формирование сложного SQL запроса для SQL Server 2000





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