hlmod.hu

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



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: Google [Bot] 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  [ 7 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Static Vs New
HozzászólásElküldve: 2013.07.28. 08:42 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
Sziasztok!

Azt szertném kérdezni ,hogy mi a különbség a

SMA Forráskód: [ Mindet kijelol ]
  1. static
és a
SMA Forráskód: [ Mindet kijelol ]
  1. new
között?

Mikor melyiket kell használni?

Én azt olvastam ,hogy a static az kevesebb cpu-t eszik, de gondolom nem lehet mindig csak static-kot használni egy pluginban.

Válaszokat előre is köszönöm.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Static Vs New
HozzászólásElküldve: 2013.07.29. 14:32 
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
Üdv

a "kevesebb cpu" érdekes kifejezés, bár valóban "jobb" ha jó helyen használják.

Bevezetőül:
Változót deklarálhatunk az alábbi kulcsszavak egyikével:
new, stock, public, static

Mindegyik változót hoz létre, de mindegyik kicsit eltér a másiktól, futási és/vagy fordítási különbségeket teremtve.
new: allokálja a memóriaterületet. Ha ez eljárásban történni, akkor az eljárás végén törlődik.
stock: hasonló a newhoz, a különbség fordítás időben történik: Amennyiben a változó nincs használva sehol sem, akkor a fordító nem építi bele a p-kódba. (kisebb memóriahasználatot vonva maga után, ami jó), s ezzel el tudjátok kerülni a variable is unused warningot.
public: new + az absztrakt gépe felküldi a változó nevét, s így az más pluginból elérhetővé válik (szerkeszthető, módosítható). Jó dolog, de inkább a natív az elterjedt, mivel az biztosít valamiféle interface-t, protokollt, s így szabályok is adhatóak a módosításához stb.
static: mint a new, de ha eljárásban definiálod, nem törlődik a memóriában, hanem ott marad. (Allokálási idő nem lesz, csak egyszer foglalja le, s az értékét is megtartja)

Továbbá tisztázzuk, hogy vannak
1) globális változók és
2) lokális változók

( Általában az okos, hozzáértő scriptelek (itt nem sok van, hehe :P) a globális változókat egy helyre gyűjtik, g_ pefixel (vagy simán g prefixel) ellátva, hogy tudják, ez elérhető bárhonnan, hisz a globális területen lett definiálva.)

A globális változók mindenhol elérhetőek (tehát mindig léteznek), így felesleges is staticcal deklarálni, mivel azok elérhetőek, tartalmukkal együtt.
A lokális változók azoka változók, amiket eljárásokban deklarálunk. Ezek , az eljárás lefutása végén eltűnnek a memóriából.
DE ha az eljárásban staticcal hozol létre változót, az nem törlődik ki.

newra és staticra mutatok egy egyszerű példascriptet.
Tesztelni nem teszteltem, csak szemléltetni akarom a kommentekben (isten ments, hogy valaki ezt feltegye valahova.... de ha vállalja a körberöhögést, felőlem :D), mikor "mi történik" a változóval
SMA Forráskód: [ Mindet kijelol ]
  1.  
  2. #include <amxmodx>
  3.  
  4. new bool:g_isAlive[33]
  5.  
  6. public plugin_init()
  7. {
  8. // Code
  9. }
  10.  
  11. public client_disconnect(id)
  12. {
  13. g_isAlive[id] = false; // Globális változó, ez bárhonnan elérhető
  14. }
  15.  
  16. public client_connect(id)
  17. {
  18. new Float:delay = 5.0; // csak lokális, eljárás után megszűnik
  19. set_task(delay, "print_task", id + 1337);
  20. g_isAlive[id] = false; // Globális változó, ez bárhonnan elérhető
  21. }
  22.  
  23.  
  24. public print_task(taskid)
  25. {
  26. new id = taskid - 1337;
  27.  
  28. static message[100]; // Egyszer lefoglalod, s a memóriában bent marad
  29. client_print(id, print_chat, message); // Elso futaskor ures stringet fog irni. majd ezt: "Ez itt egy udvozlo szovegecske"
  30. // A masodik plaernek meg ezt fogja irni 2*: "Ez itt egy udvozlo szovegecske"
  31.  
  32. if (!is_user_alive(id))
  33. {
  34. // set_task(Delay, "print_task", taskid); // Itt hiba lesz, delay csak a connect fgvben definiált. Átírjuk így 5.0-ra:
  35. set_task(5.0, "print_task", taskid);
  36. }
  37. else
  38. {
  39. format(message, 100, "Ez itt egy udvozlo szovegecske")
  40. client_print(id, print_chat, message);
  41. }
  42. }

_________________
Kód:
I'm back

Kép

Ők köszönték meg Metal nek ezt a hozzászólást: Vinnice (2013.07.29. 15:00)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Static Vs New
HozzászólásElküldve: 2013.07.29. 15:03 
Offline
Jómunkásember
Avatar

Csatlakozott: 2012.09.23. 20:29
Hozzászólások: 325
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 87 alkalommal
Még egy kérdés.
Ezt lehet így is vagy csak a new operátorral?
SMA Forráskód: [ Mindet kijelol ]
  1. static bool:valami[33];


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Static Vs New
HozzászólásElküldve: 2013.07.29. 15:05 
Offline
Őstag

Csatlakozott: 2013.01.27. 17:48
Hozzászólások: 1247
Megköszönt másnak: 6 alkalommal
Megköszönték neki: 61 alkalommal
Vinnice írta:
Még egy kérdés.
Ezt lehet így is vagy csak a new operátorral?
SMA Forráskód: [ Mindet kijelol ]
  1. static bool:valami[33];

Szerintem csak new. operátorral.

_________________
banned user

Ők köszönték meg JoGoBeLLa nek ezt a hozzászólást: Vinnice (2013.07.29. 15:07)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Static Vs New
HozzászólásElküldve: 2013.07.29. 15:42 
Offline
Developer
Avatar

Csatlakozott: 2011.06.01. 21:11
Hozzászólások: 7962
Megköszönt másnak: 295 alkalommal
Megköszönték neki: 535 alkalommal
Kikell próbálni, biztos lehet. De boolt inkább globálisan szoktuk többségben használni.

_________________
http://www.easyrankup.eu


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Static Vs New
HozzászólásElküldve: 2013.07.29. 19:47 
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
WRONG WRONMG és WRONG
Ahogy írtam, változókat ezekkel a kulcsszavakkal lehet deklarálni:
new, static, stock, public
A bool az egy TAG, ami osztályozza a változót.

Tehát ez így helyes:
Kód:
static bool:g_isAlive[33]


változódeklaráció szintaxisa:
<new, stock, static, public> [TAG:]<változó>

Olyan h általában globálisan használjuk, az irreleváns... tudsz olyan plugint is írni, amihez nincsenek globális változók, sőt, olyat is, amiben a bool változók mind csak eljárásokban vannak.
Ez az állítás így értelmetlen, logikátlan, számomra feldolgozhatatlan kijelentés...

_________________
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: Static Vs New
HozzászólásElküldve: 2013.07.29. 20:36 
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
Metal :DDDDDDDD NEMVAGYOKIDEGEES WRONGWRONG :DDDD

Egyébként a new az közelsem operátor..

+, -, *, &, :, =, ||, <, >, !

ezek operátorok..

Ők köszönték meg Silent nek ezt a hozzászólást: kiki (2013.07.29. 21:03)
  Népszerűség: 2.27%


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  [ 7 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 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