Sziasztok,
ismét gondoltam írok nektek valamit, mivel elég sok rendezetlen, össze - vissza kódot láttam mostanság, ez csak az ami eszembe jutott hirtelen, ha valamivel kiegészítenétek nyugodtan írjátok meg hozzászólásban.
Amiről én első sorban szót ejtenék:
1. Több dimenziós tömbök
2. Kódvezetési stílusok
3. Szóközök / eltolások
4. Kommentelés, definíciók, makrók
5. "Beszélő elnevezések" / Hungarian Notation ( HN )
Szóval ugorjunk is neki a dolgoknak.
1. Több dimenziós tömbökBizonyára már többen is hallottatok erről a dologról, tudjátok is mi ez csak valamiért nem szeretitek használni, pedig eléggé hasznos lehet, főleg mostanság a cs:go modokhoz...
Nézzük is, hogy hogyan használható:
//Például a szerverünkön van 5 fizetőeszköz azt eddig így tároltuk volna:
new forint[ MAX_PLAYERS ];
new arany[ MAX_PLAYERS ];
new ezust[ MAX_PLAYERS ];
new bronz[ MAX_PLAYERS ];
new pont[ MAX_PLAYERS ];
//Most azonban rájövünk, h sokkalta egyszerűbb így:
new fizetoeszkoz[ MAX_PLAYERS ][ 5 ];
/*
fizetoeszkoz[ id ][ 0 ] - forint
fizetoeszkoz[ id ][ 1 ] - arany
fizetoeszkoz[ id ][ 2 ] - ezust
fizetoeszkoz[ id ][ 3 ] - bronz
fizetoeszkoz[ id ][ 4 ] - pont
fizetoeszkoz[ id ][ 5 ] - ugyebár tudjunk, h minden tömbnek van egy záró karaktere ( EOS ) nah ez az.
( fizetoeszkoz[ id ][ 5 ] = 0 vagy fizetoeszkoz[ id ][ 5 ] = '^0' esetleg fizetoeszkoz[ id ][ 5 ] = EOS )
*/
Előnyök:Több, hasonló elemet könnyedén tárolhatunk így, egy áttekinthetőbb formában.
Ciklusok segítségével könnyedén végigmehetünk az összes elemen.
Hátrányok:Minimálisan lassabbak mint a sima változók, mivel hosszabb utat kell bejárni, míg megtaláljuk őket a memóriában ( ezred másodpercek ).
Tudni kell, h mit hányadik indexen tárolunk, erre megoldást nyújt az enumeráció( enum ), definiálás( #define ) vagy a kommentelés.
2. Kódvezetési stílusokSzerintem mindegy milyen stílusban vezetitek a kódotokat, de a lényeg, h legyen egységes, ne használjatok feltételenként egy másikat, nagyon tudja rontani az olvashatóságát a kódnak, ebből adódóan akár a hibaelhárítást is nehezítheti, ha hanyag módon írjátok meg az egész plugint.
( Általában ez így is van, amit kiadnak trehány kódokat az tele is van hibákkal. )
Nézzük pár stílust:
K&R és annak variáció:while ( x == y ) {
valami();
valami_mas();
}
Allmanwhile ( x == y )
{
valami();
valami_mas();
}
Lispwhile ( x == y ) {
valami();
valami_mas();}
Előnyök:Ha megszoksz egy stílust, ami tetszik vagy kézre áll, és így írod végig a kódot, akkor a végeredmény egy sokkal átláthatóbb, letisztultabb kód lesz.
Könnyebb hiba keresés. ( egy 20 soros kódnál nem nagyon tűnik fel ez a dolog, de amikor már több száz, esetleg több ezer sorokról beszélünk akkor már számít )
Hátrányok:Esetleg annyi, hogy több sor lesz a kód ( pl.: a Lisp-féle kódvezetés eléggé sortakarékos az Allman-féléhez képest. ), de ez nem hiszem, hogy nagy probléma.
3. Szóközök / eltolásokA szóközök és a jól eltolt sorok is nagyban tudják javítani egy forráskód olvashatóságát, ami miatt ismételten kiemelném, hogy könnyebb a hiba keresés, vagy ha kiadod valakinek a munkádat nem fogja egyből azt mondani, h igénytelen vagy.
Példa:
public Fuggvenyem(valtozo[],azonosito,szam)
{
valtozo[azonosito]=szam;
}
//Az előbbiek helyett:
public Fuggvenyem ( valtozo[], azonosito, szam )
{
valtozo[ azonosito ] = szam;
}
Előnyök:Hasonlóak, mint az előbbinél.
HátrányokTöbb karaktert kell írnod, eleinte fura megszokni, de utána már jön magától.
4. Kommentelés, definíciók, makrókKommentelés: ezzel is csak még tovább szépítjük a kódunkat és még olvashatóbbá tesszük, a kommentelésnek van több változata is:
1 soros:
//Ez egy egy soros komment
több soros:
/* <-Itt nyitom, aztán
Írok
Amennyit
Csak
Akarok
majd
zárom:
*/
//Egy másik lehetőség több sor "kikommentelésére":
#if 0
szöveg
meg
minden
más
amit
akarok
#endif
Definíciók: ha egy számot, műveletet, kifejezést vagy szöveget szeretnénk többször is használni a kódunkban, akkor van lehetőségünk annak definiálására, megkönnyíti a kód szerkesztését.
Példák:
//Itt egy szám:
#define MAX_PLAYERS 32
//Itt egy szöveg:
#define GRT "Gratulálunk, ön az eheti nyertes!"
//Esetleg egy művelet
#define SZAMOLAS ( 5 + ( 1-2 ) * 5 )
Makrók: hasonló az előzőhöz, csak itt tudunk megadni elemeket a definiálásba, kisebb kód részeket is megadhatunk.
Példa:
#define VAN_E_FEGYVER(%0,%1) ( get_user_weapon( %0 ) == %1 )
//Utána használatban:
if( VAN_E_FEGYVER( id, CSW_AWP ) )
{
valtozo = true;
}
else
{
valtozo = false;
}
//Több soros makrók:
#define VAN_E_FEGYVER(%0,%1,%2)
if( get_user_weapon( %0 ) == %1 ) \
%2 = true; \
else \
%2 = false;
5. "Beszélő elnevezések" / Hungarian Notation ( HN )Biztos sokan láttátok már, h 1-2 ember ilyen "fura" g_ , g, g_i, g_sz stb -ket irkál a változók neveibe, vagy a függvények nevét fn -el vagy fgv -vel kezdi... Sokáig én se értettem, h ez mire jó vagy mit tesz, de ahogy egyre több változót használtam, gyakran ugyanazzal a névvel, de más típussal úgy szépen lassan rájöttem, h nem is hülyeség, aki ismeri a jelöléseket, kicsit képben van a dologgal, annak sokkal könnyebb lesz olvasnia egy ilyen kódot és rájönnie, hogy melyik változó mit jelöl.
Esetleg ha még a név további része is utal arra amire használjuk, akkor már szinte folyékonyan olvasható, h mit is csinál a kódod
Szóval ezek a jelölések és jelentésük:
változóknál:g_ / g - globális, bármelyik függvény hozzáfér, a plugin futása alatt nem veszti el az értékét.
sz / s - string, karakterlánc, szöveg
fl / f - float, valós számot tároló változó
i - integer, egész számot tároló változó
b - bool, logikai értéket tároló változó
példa:
g_bKivalasztva
g_sNev
g_iOles
g_fEsely
iHalal
bElfogad....
függvényeknél:fn - function, függvény
fgv - függvény
+ esetleg megjelölhetjük a függvény nevében a visszatérés értékének a típusát is, én személy szerint ezt nem szoktam kitenni.
egyéb ami előfordulhat amxmodx -el és cs-vel kapcsolatban:ev - event, pl.: public evDeathMsg( ) { }
fw / fwd - forward
Persze pawnban a típus hiányosság miatt itt megint nincs annyi lehetőség, mint más nyelvekben...
Részemről ennyi lenne, amíg összeugranak az sma tag közötti részek nem nagyon szeretnék hozzányúlni a leíráshoz, szóval, ha vmit hiányoltok azt írjátok meg szépen kifejtve hozzászólásban, nem szerkesztem bele ebbe amíg nem javítják ezt a hibát.
Remélem segítettem valamennyit, esetleg kitisztult 1 - 2 dolog a fejetekben.
ui.: Ha nehezíteni akarjátok a kódotok olvasását csináljátok az itt leírtak ellentétét xd