Coding Styles and Obfuscated Programming

Hai readers,
pernah kedapetan kode program yang ditulis kayak gini gak ?

#include <stdio.h> /*Program penukaran dua variabel*/
void tukar(int* x, int* y){
int temp=*x;
*x=*y;
*y=temp;
}
int main(){
int a=5;
int b=7;
printf("a=%d\n",a);
printf("b=%d\n",b);
tukar(&a,&b); //terjadi penukaran
printf("..Setelah penukaran..\n");
printf("a=%d\n",a);
printf("b=%d\n",b);
}

Waktu pertama kali diliat, mungkin ada beberapa orang yang mengerti maksud kode di atas, tapi tidaklah banyak. Kita sebagai programmer yang baik harus membuat kode kita readable atau dapat dibaca dan dipahami. Coba bandingkan kode di atas dengan kode di bawah ini.

/**
 *
 * Program penukaran dua variabel
 * dengan menggunakan sub-program.
 */

#include <stdio.h>

void tukar(int* x, int* y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main()
{
    // deklarasi dan inisialisasi variabel
    int a = 5;
    int b = 7;

    // variabel sebelum tertukar
    printf("a = %d\n", a);
    printf("b = %d\n", b);

    tukar(&a, &b); //terjadi penukaran

    printf("..Setelah penukaran..\n");

    // variabel setelah tertukar
    printf("a = %d\n", a);
    printf("b = %d\n", b);
}

A lot more readable, right ?
Ini ada beberapa perbandingan gaya penulisan kode yang disarankan

Variabel:
// Disarankan

int x = 5;

// Tidak disarankan

int x=5;

Function call:
// Disarankan

printf("x = %d", x);

// Tidak disarankan

printf("x=%d\n",x);

Operator dan operand:
// Disarankan

z = x + (y * 2);

// Tidak disarankan

z=x+y*2;

Scope spacing:
// Disarankan

void sub1()
{
   //TODO
}

void sub2()
{
   //TODO
}

// Tidak disarankan

void sub1()
{
   //TODO
}
void sub2()
{
   //TODO
}

Scope indentation:
// Disarankan

int main()
{
   int x = 5;
   printf("x = %d\n", x);
}

// Tidak disarankan

int main()
{
int x=5;
printf("x=%d\n",x);
}


Tapi dari semua perbandingan kode di atas, ada loh orang yang menulis kode program dengan gaya yang unik. Contohnya seperti ini.

#include                                     <math.h>
#include                                   <sys/time.h>
#include                                   <X11/Xlib.h>
#include                                  <X11/keysym.h>
                                          double L ,o ,P
                                         ,_=dt,T,Z,D=1,d,
                                         s[999],E,h= 8,I,
                                         J,K,w[999],M,m,O
                                        ,n[999],j=33e-3,i=
                                        1E3,r,t, u,v ,W,S=
                                        74.5,l=221,X=7.26,
                                        a,B,A=32.2,c, F,H;
                                        int N,q, C, y,p,U;
                                       Window z; char f[52]
                                    ; GC k; main(){ Display*e=
 XOpenDisplay( 0); z=RootWindow(e,0); for (XSetForeground(e,k=XCreateGC (e,z,0,0),BlackPixel(e,0))
; scanf("%lf%lf%lf",y +n,w+y, y+s)+1; y ++); XSelectInput(e,z= XCreateSimpleWindow(e,z,0,0,400,400,
0,0,WhitePixel(e,0) ),KeyPressMask); for(XMapWindow(e,z); ; T=sin(O)){ struct timeval G={ 0,dt*1e6}
; K= cos(j); N=1e4; M+= H*_; Z=D*K; F+=_*P; r=E*K; W=cos( O); m=K*W; H=K*T; O+=D*_*F/ K+d/K*E*_; B=
sin(j); a=B*T*D-E*W; XClearWindow(e,z); t=T*E+ D*B*W; j+=d*_*D-_*F*E; P=W*E*B-T*D; for (o+=(I=D*W+E
*T*B,E*d/K *B+v+B/K*F*D)*_; p<y; ){ T=p[s]+i; E=c-p[w]; D=n[p]-L; K=D*m-B*T-H*E; if(p [n]+w[ p]+p[s
]== 0|K <fabs(W=T*r-I*E +D*P) |fabs(D=t *D+Z *T-a *E)> K)N=1e4; else{ q=W/K *4E2+2e2; C= 2E2+4e2/ K
 *D; N-1E4&& XDrawLine(e ,z,k,N ,U,q,C); N=q; U=C; } ++p; } L+=_* (X*t +P*M+m*l); T=X*X+ l*l+M *M;
  XDrawString(e,z,k ,20,380,f,17); D=v/l*15; i+=(B *l-M*r -X*Z)*_; for(; XPending(e); u *=CS!=N){
                                   XEvent z; XNextEvent(e ,&z);
                                       ++*((N=XLookupKeysym
                                         (&z.xkey,0))-IT?
                                         N-LT? UP-N?& E:&
                                         J:& u: &h); --*(
                                         DN -N? N-DT ?N==
                                         RT?&u: & W:&h:&J
                                          ); } m=15*F/l;
                                          c+=(I=M/ l,l*H
                                          +I*M+a*X)*_; H
                                          =A*r+v*X-F*l+(
                                          E=.1+X*4.9/l,t
                                          =T*m/32-I*T/24
                                           )/S; K=F*M+(
                                           h* 1e4/l-(T+
                                           E*5*T*E)/3e2
                                           )/S-X*d-B*A;
                                           a=2.63 /l*d;
                                           X+=( d*l-T/S
                                            *(.19*E +a
                                            *.64+J/1e3
                                            )-M* v +A*
                                            Z)*_; l +=
                                            K *_; W=d;
                                            sprintf(f,
                                            "%5d  %3d"
                                            "%7d",p =l
                                           /1.7,(C=9E3+
                              O*57.3)%0550,(int)i); d+=T*(.45-14/l*
                             X-a*130-J* .14)*_/125e2+F*_*v; P=(T*(47
                             *I-m* 52+E*94 *D-t*.38+u*.21*E) /1e2+W*
                             179*v)/2312; select(p=0,0,0,0,&G); v-=(
                              W*F-T*(.63*m-I*.086+m*E*19-D*25-.11*u
                               )/107e2)*_; D=cos(o); E=sin(o); } }


#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

Gaya penulisan kode seperti itu dinamakan Obfuscated Programming. Yaitu penulisan kode agar maksud dari kode tersebut susah untuk ditebak.



Sekian dulu, semoga kita dapat menulis kode yang lebih indah dan readable.

Post a Comment