hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.29. 09:43



Jelenlévő felhasználók

Jelenleg 347 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 347 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 11 hozzászólás ]  Oldal 1 2 Következő
Szerző Üzenet
 Hozzászólás témája: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.04. 15:56 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
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ök

Bizonyá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ó:
SMA Forráskód: [ Mindet kijelol ]
  1. //Például a szerverünkön van 5 fizetőeszköz azt eddig így tároltuk volna:
  2.  
  3. new forint[ MAX_PLAYERS ];
  4. new arany[ MAX_PLAYERS ];
  5. new ezust[ MAX_PLAYERS ];
  6. new bronz[ MAX_PLAYERS ];
  7. new pont[ MAX_PLAYERS ];
  8.  
  9. //Most azonban rájövünk, h sokkalta egyszerűbb így:
  10.  
  11. new fizetoeszkoz[ MAX_PLAYERS ][ 5 ];
  12. /*
  13. fizetoeszkoz[ id ][ 0 ] - forint
  14. fizetoeszkoz[ id ][ 1 ] - arany
  15. fizetoeszkoz[ id ][ 2 ] - ezust
  16. fizetoeszkoz[ id ][ 3 ] - bronz
  17. fizetoeszkoz[ id ][ 4 ] - pont
  18. fizetoeszkoz[ id ][ 5 ] - ugyebár tudjunk, h minden tömbnek van egy záró karaktere ( EOS ) nah ez az.
  19. ( fizetoeszkoz[ id ][ 5 ] = 0 vagy fizetoeszkoz[ id ][ 5 ] = '^0' esetleg fizetoeszkoz[ id ][ 5 ] = EOS )
  20. */


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ílusok

Szerintem 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ó:
SMA Forráskód: [ Mindet kijelol ]
  1. while ( x == y ) {
  2. valami();
  3.  
  4. valami_mas();
  5. }


Allman
SMA Forráskód: [ Mindet kijelol ]
  1. while ( x == y )
  2. {
  3. valami();
  4.  
  5. valami_mas();
  6. }


Lisp
SMA Forráskód: [ Mindet kijelol ]
  1. while ( x == y ) {
  2. valami();
  3.  
  4. 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ások

A 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:
SMA Forráskód: [ Mindet kijelol ]
  1. public Fuggvenyem(valtozo[],azonosito,szam)
  2. {
  3. valtozo[azonosito]=szam;
  4. }
  5.  
  6. //Az előbbiek helyett:
  7.  
  8. public Fuggvenyem ( valtozo[], azonosito, szam )
  9. {
  10. valtozo[ azonosito ] = szam;
  11. }
  12.  


Előnyök:
Hasonlóak, mint az előbbinél.

Hátrányok
Több karaktert kell írnod, eleinte fura megszokni, de utána már jön magától.


4. Kommentelés, definíciók, makrók

Kommentelé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:
SMA Forráskód: [ Mindet kijelol ]
  1. //Ez egy egy soros komment


több soros:
SMA Forráskód: [ Mindet kijelol ]
  1. /* <-Itt nyitom, aztán
  2. Írok
  3. Amennyit
  4. Csak
  5. Akarok
  6. majd
  7. zárom:
  8. */
  9.  
  10. //Egy másik lehetőség több sor "kikommentelésére":
  11.  
  12. #if 0
  13. szöveg
  14. meg
  15. minden
  16. más
  17. amit
  18. akarok
  19. #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:
SMA Forráskód: [ Mindet kijelol ]
  1. //Itt egy szám:
  2. #define MAX_PLAYERS 32
  3.  
  4. //Itt egy szöveg:
  5. #define GRT "Gratulálunk, ön az eheti nyertes!"
  6.  
  7. //Esetleg egy művelet
  8. #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:
SMA Forráskód: [ Mindet kijelol ]
  1. #define VAN_E_FEGYVER(%0,%1) ( get_user_weapon( %0 ) == %1 )
  2.  
  3. //Utána használatban:
  4.  
  5. if( VAN_E_FEGYVER( id, CSW_AWP ) )
  6. {
  7. valtozo = true;
  8. }
  9. else
  10. {
  11. valtozo = false;
  12. }
  13.  
  14. //Több soros makrók:
  15.  
  16. #define VAN_E_FEGYVER(%0,%1,%2)
  17. if( get_user_weapon( %0 ) == %1 ) \
  18. %2 = true; \
  19. else \
  20. %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 :D

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

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.04. 18:18 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2014.09.08. 22:21
Hozzászólások: 3014
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 555 alkalommal
Nagyon jó felhozatal. :D
A téma nevén próbálj meg egy kicsit csiszolni légyszíves, hogy könnyebben rád találjanak.

_________________
GitHub - mforce


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.04. 19:41 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Majd próbálok még szépíteni, pontosítani rajta, amint nem ugrik össze minden :D

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.06. 17:43 
Offline
Újonc
Avatar

Csatlakozott: 2015.10.03. 09:05
Hozzászólások: 8
Grat!!!
Majd ha lesz időd, akkor még írj hozzá többet (de csak ha akarsz!)
Szerintem elég hasznos tutorial. :)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.06. 18:07 
Offline
Tud valamit
Avatar

Csatlakozott: 2015.07.23. 17:45
Hozzászólások: 103
Megköszönt másnak: 4 alkalommal
Megköszönték neki: 5 alkalommal
Köszönöm Akosch::.
Szép munka, szép leírás.
Csak így tovább :D

_________________
Nokedli <3
Pöri (y) [kozep]Kép[/kozep]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.07. 10:51 
Offline
Imperátor
Avatar

Csatlakozott: 2009.04.21. 09:33
Hozzászólások: 3991
Megköszönt másnak: 5 alkalommal
Megköszönték neki: 135 alkalommal
Szép, az elsőre tettem volna be mintakódot, de olvastam a hátrányokban hogy miként lehetne szebbé varázsolni :)
De ettől függetlenül van pár számomra érdekes észrevételem, pl ki az, aki makrót használ kommentelésre? A "hosszabb utat kell bejárni" kifejezést nem igazán értem.

_________________
Kód:
I'm back

Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.11. 10:33 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Köszönöm az észrevételeket :D

Metál:
1. Ha lesz úgy időm majd dobok valami mintakódot az elsőhöz. :D
2. Csak gondoltam érdekességkép megmutatom, h ilyet is lehet. ( esetleg, ha valaki szeretné, h megmaradjanak a kiemelések, de nem akarja, h beleforduljon a kódba akkor jó )
3. Így visszaolvasva, átgondolva én se értem mit akartam.

Amper:
Ha még eszembejut valami akkor lesz bővítve, vagy ha írtok olyasmit utána nézhetek és hozzáfűzöm, vagy akár ha valami eszetekbejut ti is bemutathatjátok hozzászólásban :)

Skyway:
Köszi :D

_________________
Néha itt, de többször nem.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.10.11. 14:36 
Offline
Felfüggesztve
Avatar

Csatlakozott: 2013.06.09. 18:47
Hozzászólások: 2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
Metal írta:
A "hosszabb utat kell bejárni" kifejezést nem igazán értem.


Szerintem arra gondolt, hogy lassabban fut le, bár ez se igaz. :)

Megj.: Szép leírás, tetszik. :)

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.11.30. 22:12 
Offline
Lelkes
Avatar

Csatlakozott: 2015.11.30. 12:14
Hozzászólások: 20
Megköszönt másnak: 1 alkalommal
Szép Munka! :3, Gratulálok :)

_________________
Szia


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: [TUT] Hasznos apróságok
HozzászólásElküldve: 2015.12.06. 05:50 
Offline
Signore Senior
Avatar

Csatlakozott: 2011.09.09. 17:39
Hozzászólások: 4020
Megköszönt másnak: 12 alkalommal
Megköszönték neki: 139 alkalommal
Azért a globális változónak sincs "egész végig plugin futása alatt" értéke. Ugyanúgy működik, mint egy helyi, vagy egy saját változó, csak ez bármi számára elérhető.

Pl ha nem kap kezdőértéket / null értéket kap valahol. (Nem biztos, hogy pawnban léteznek ezek.)


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 11 hozzászólás ]  Oldal 1 2 Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole