[Savjet] Local ili Global string?

Započeo Angelos, Jun 22, 2012, 19:08:04 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Ako u svakoj komandi primjerice, koristim string za obican tekst (poruka igracu) - new string[128];... i naravno, ako skripta ima nekih 200 komandi, onda se u svakoj toj komandi radi novi string koji zauzima memoriju...

Dali bi se moglo napraviti jedan global string (na vrh skripte new gstring[128];) koji bi sluzio samo za format i SCM (slanje poruka) igracu unutar svih komandi (da ne moram na vrh svake komande raditi novi string).

To bi ustedjelo memoriju, a mene zanima dali se to moze napraviti da normalno radi tj. da se stringovi ne pomjesaju ili nesto takvo ..

- Pitanje za iskusnije :)

vlado_plavsic

Sad sam bas testirao to(zanimalo me) i radi.Sad ne znam kako ce se ponasati na mnogo komandi ali na 2 radi xD

možeš i globalni, ali pazi da ne koristiš u nekoj funkciji taj isti...

pr:

new globalniString[128];

komanda:() {//nebitna sintaksa ovdje, vrijedi za bilo koji sistem komandi pa sam zato ovako napisao
globalniString = "BLA";
promjeni();
printf(globalniString);// PRINTAT ĆE "Ha Ha" i to nije ono što si htio jer si koristio globalni još jednom pa npr kod mysql threada možeš [cenzura] napravit
}

stock promijeni() {
globalniString = "Ha ha";
}




Dobar način programiranja:
-ne koristi globalne stringove za više lokalnih funkcija jer kad tad ćeš dobiti neočekivan obrat jer ćeš taj isti string u medjuvremenu promijeniti u nekoj funkciji
Poslednja Izmena: Jun 22, 2012, 20:06:39 POSLE PODNE od Dude

N0NE

jednom koristio globalne stringove i vise nikad, moja preporuka nemoj  ;)

Meni nije potrebno u funkcijama... ja zelim samo oko podrucja komandi, i to samo oko ispisivanja poruka igracu...

Primjer (u dcmdu):


new gstring[128];

dcmd_prvakomanda(playerid, params[])
{
format(gstring, 128, "Ova komanda se zove %s.", "/prvakomanda");
SCM(gstring, COLOR_WHITE, string);
return 1;
}

dcmd_drugakomanda(playerid, params[])
{
format(gstring, 128, "Ova komanda se zove %s.", "/drugakomanda");
SCM(gstring, COLOR_WHITE, string);
return 1;
}


Dali bi to moglo proci?

Logicno je ako koristim global string u funkciji, a funkciju u komandi u kojoj se koristi global string .. da se moze poklopit i da ne ispisuje sto treba pisat .. :-\

Ako ga formatiraš pravilno ne možeš pogriješit! Dosta će ti smanjit veličinu u globalu. Ako ga koristiš iznad svih callbackova, greške ti mogu stvarat includovi koji imaju istu deklarisanu varijablu..
Poslednja Izmena: Jun 22, 2012, 21:37:00 POSLE PODNE od Vrabac

Oprostite sto tu pitam ali dali ja mogu odredit tip varijable npr int nesto ili float nestodrugo jer mi je nekako neprirodno pisat new :D

Citat: Vrabac poslato Jun 22, 2012, 21:36:04 POSLE PODNE
Ako ga formatiraš pravilno ne možeš pogriješit! Dosta će ti smanjit veličinu u globalu. Ako ga koristiš iznad svih callbackova, greške ti mogu stvarat includovi koji imaju istu deklarisanu varijablu..

nikad to ne možeš biti siguran, šta se ti sjećaš šta si programirao u kodu prije 2 mjeseca... to je užasno loš način programiranja...

Citat: FireMan poslato Jun 23, 2012, 00:11:15 PRE PODNE
Oprostite sto tu pitam ali dali ja mogu odredit tip varijable npr int nesto ili float nestodrugo jer mi je nekako neprirodno pisat new :D
nije ti to C, C++, Java, itd da tako odredjujes varijable, tip odredjujes prije ili poslije imenovanja varijable, a new oznacava kreiranje nove varijable...

Citat: Dude poslato Jun 23, 2012, 02:09:34 PRE PODNE
Citat: Vrabac poslato Jun 22, 2012, 21:36:04 POSLE PODNE
Ako ga formatiraš pravilno ne možeš pogriješit! Dosta će ti smanjit veličinu u globalu. Ako ga koristiš iznad svih callbackova, greške ti mogu stvarat includovi koji imaju istu deklarisanu varijablu..

nikad to ne možeš biti siguran, šta se ti sjećaš šta si programirao u kodu prije 2 mjeseca... to je užasno loš način programiranja...

Pa kada formatiraÅ¡ string, direktno ga formatiraÅ¡ iznad funkcije koja je u vezi sa tim stringom, ne ubacujeÅ¡ nikakve funkcije izmeÄ'u i ne može bit greÅ¡ka. U ovom tvom primjeru, koja je svrha formatiranja ispred pozivanja funkcije, kada ti je to nebitno?
Citat: Dude poslato Jun 22, 2012, 20:05:29 POSLE PODNE
možeš i globalni, ali pazi da ne koristiš u nekoj funkciji taj isti...

pr:

new globalniString[128];

komanda:() {//nebitna sintaksa ovdje, vrijedi za bilo koji sistem komandi pa sam zato ovako napisao
globalniString = "BLA";
promjeni();
printf(globalniString);// PRINTAT ĆE "Ha Ha" i to nije ono što si htio jer si koristio globalni još jednom pa npr kod mysql threada možeš [cenzura] napravit
}

stock promijeni() {
globalniString = "Ha ha";
}


Citat: Vrabac poslato Jun 23, 2012, 12:11:51 POSLE PODNE
Citat: Dude poslato Jun 23, 2012, 02:09:34 PRE PODNE
Citat: Vrabac poslato Jun 22, 2012, 21:36:04 POSLE PODNE
Ako ga formatiraš pravilno ne možeš pogriješit! Dosta će ti smanjit veličinu u globalu. Ako ga koristiš iznad svih callbackova, greške ti mogu stvarat includovi koji imaju istu deklarisanu varijablu..

nikad to ne možeš biti siguran, šta se ti sjećaš šta si programirao u kodu prije 2 mjeseca... to je užasno loš način programiranja...

Pa kada formatiraÅ¡ string, direktno ga formatiraÅ¡ iznad funkcije koja je u vezi sa tim stringom, ne ubacujeÅ¡ nikakve funkcije izmeÄ'u i ne može bit greÅ¡ka. U ovom tvom primjeru, koja je svrha formatiranja ispred pozivanja funkcije, kada ti je to nebitno?
Citat: Dude poslato Jun 22, 2012, 20:05:29 POSLE PODNE
možeš i globalni, ali pazi da ne koristiš u nekoj funkciji taj isti...

pr:

new globalniString[128];

komanda:() {//nebitna sintaksa ovdje, vrijedi za bilo koji sistem komandi pa sam zato ovako napisao
globalniString = "BLA";
promjeni();
printf(globalniString);// PRINTAT ĆE "Ha Ha" i to nije ono što si htio jer si koristio globalni još jednom pa npr kod mysql threada možeš [cenzura] napravit
}

stock promijeni() {
globalniString = "Ha ha";
}


lega nikad ti neces biti programer jer mislis da je pawn kod nesto sto je reprezentativno... prvo pravilo dobrog programiranj jeste da uvije, ali bas uvijek zakljucas varijable lokalno i da ih tako koristis ako je to moguce, to je najbolji primjer kod OOP, koje koriste danas svi važniji programski jezici koji imaju i definiranje varijabli kao takve, da ne bude pogrešaka...

private $varijabla;//php primjer, varijabla je zakljucana unutar klase i mozes dobiti njezinu vrijednost samo preko funkcije kocu ces napraviti, direktno ti nije dospuna
VrijednostVarijable() { return $varijabla; }

ovo o čemu ti pričaj je direktno programiranje liniju za linijom pa tako neces pogrijesiti, ali to je [cenzura] od koda, ima ga previse i brze nikad nece raditi od rada sa funkcijama koje ces napraviti...

znaci o cemu ja tu pricam, [cenzura] programiranje je NLRP, lik kopira tonu koda pod svaki case slucaj u switchu, premda je kod gotovo indentican, samo recimo printa drugaciji tekst... goreg programiranja/skriptanja vec dugo nisam vidio...

Kad programiras uvijek gledas da minimaliziras kod i da gdje je moguce napravise funkcije koje ces pozivati vise puta, brzina je jednaka, a zauzece memorije je puno manje, ali opet napominjem radom sa varijablama lokalno... sreća je vaša što je samp single threaded, jer bi bilo teškog sranja s takvim radom, a ovdje je najbolji način takvog sranja rada s istim stringom unutar threada u mysql pluginu...
Poslednja Izmena: Jun 23, 2012, 12:56:27 POSLE PODNE od Dude

Koristi globalnu varijablu. Ja osobno imam jednu funkciju koja odmah i formatira tekst ako treba, tako da imam odmah i, ajmo reć', built-in format funkciju u SCM. I dosad nikakvih problema nije bilo.

Last nick: Paradox

Citat: Dude poslato Jun 23, 2012, 12:54:22 POSLE PODNE

lega nikad ti neces biti programer jer mislis da je pawn kod nesto sto je reprezentativno... prvo pravilo dobrog programiranj jeste da uvije, ali bas uvijek zakljucas varijable lokalno i da ih tako koristis ako je to moguce, to je najbolji primjer kod OOP, koje koriste danas svi važniji programski jezici koji imaju i definiranje varijabli kao takve, da ne bude pogrešaka...

private $varijabla;//php primjer, varijabla je zakljucana unutar klase i mozes dobiti njezinu vrijednost samo preko funkcije kocu ces napraviti, direktno ti nije dospuna
VrijednostVarijable() { return $varijabla; }

ovo o čemu ti pričaj je direktno programiranje liniju za linijom pa tako neces pogrijesiti, ali to je [cenzura] od koda, ima ga previse i brze nikad nece raditi od rada sa funkcijama koje ces napraviti...

znaci o cemu ja tu pricam, [cenzura] programiranje je NLRP, lik kopira tonu koda pod svaki case slucaj u switchu, premda je kod gotovo indentican, samo recimo printa drugaciji tekst... goreg programiranja/skriptanja vec dugo nisam vidio...

Kad programiras uvijek gledas da minimaliziras kod i da gdje je moguce napravise funkcije koje ces pozivati vise puta, brzina je jednaka, a zauzece memorije je puno manje, ali opet napominjem radom sa varijablama lokalno... sreća je vaša što je samp single threaded, jer bi bilo teškog sranja s takvim radom, a ovdje je najbolji način takvog sranja rada s istim stringom unutar threada u mysql pluginu...
Upravu si! Cilj i jest minimizacija koda i njegova dinamičnost. Pravljenje includova i povezivanje u php-u je ekvivalentnost pravljenju callbackova koje ces uvezat u pawnu. To si upravu i razumijem te. Jednu globalnu varijablu, kako si reko, je besmisleno pravit, ali minimizirat sa 10 stringovnih varijabli na jednu je globalno minimizacija koda?? Ako ćeš imat 20 funkcija pod "OnPlayerCommandText" i za svaku ćeš kreirat posebno novi string(koji ćeš editovat u ispisu), bolje je da se kreira jedna varijabla, koja će se formatirat? Mislim da je njeg zanimalo to, direktno za komande, da napravi globalni string koji će upotrebljavat samo kada su komande u pitanju i njihov ispis.

Citat: Vrabac poslato Jun 23, 2012, 14:08:38 POSLE PODNE
Citat: Dude poslato Jun 23, 2012, 12:54:22 POSLE PODNE

lega nikad ti neces biti programer jer mislis da je pawn kod nesto sto je reprezentativno... prvo pravilo dobrog programiranj jeste da uvije, ali bas uvijek zakljucas varijable lokalno i da ih tako koristis ako je to moguce, to je najbolji primjer kod OOP, koje koriste danas svi važniji programski jezici koji imaju i definiranje varijabli kao takve, da ne bude pogrešaka...

private $varijabla;//php primjer, varijabla je zakljucana unutar klase i mozes dobiti njezinu vrijednost samo preko funkcije kocu ces napraviti, direktno ti nije dospuna
VrijednostVarijable() { return $varijabla; }

ovo o čemu ti pričaj je direktno programiranje liniju za linijom pa tako neces pogrijesiti, ali to je [cenzura] od koda, ima ga previse i brze nikad nece raditi od rada sa funkcijama koje ces napraviti...

znaci o cemu ja tu pricam, [cenzura] programiranje je NLRP, lik kopira tonu koda pod svaki case slucaj u switchu, premda je kod gotovo indentican, samo recimo printa drugaciji tekst... goreg programiranja/skriptanja vec dugo nisam vidio...

Kad programiras uvijek gledas da minimaliziras kod i da gdje je moguce napravise funkcije koje ces pozivati vise puta, brzina je jednaka, a zauzece memorije je puno manje, ali opet napominjem radom sa varijablama lokalno... sreća je vaša što je samp single threaded, jer bi bilo teškog sranja s takvim radom, a ovdje je najbolji način takvog sranja rada s istim stringom unutar threada u mysql pluginu...
Upravu si! Cilj i jest minimizacija koda i njegova dinamičnost. Pravljenje includova i povezivanje u php-u je ekvivalentnost pravljenju callbackova koje ces uvezat u pawnu. To si upravu i razumijem te. Jednu globalnu varijablu, kako si reko, je besmisleno pravit, ali minimizirat sa 10 stringovnih varijabli na jednu je globalno minimizacija koda?? Ako ćeš imat 20 funkcija pod "OnPlayerCommandText" i za svaku ćeš kreirat posebno novi string(koji ćeš editovat u ispisu), bolje je da se kreira jedna varijabla, koja će se formatirat? Mislim da je njeg zanimalo to, direktno za komande, da napravi globalni string koji će upotrebljavat samo kada su komande u pitanju i njihov ispis.

opet krivo govoris, nikad ali bas nikad ne radis sa globalnom varijablom...

kod OOP se takav nacin niti ne koristi, a niti jednu ozbiljniju aplikaciju proceduralnim danas vise neces moc napravit...

Citat: Dude poslato Jun 23, 2012, 14:28:10 POSLE PODNE
opet krivo govoris, nikad ali bas nikad ne radis sa globalnom varijablom...

kod OOP se takav nacin niti ne koristi, a niti jednu ozbiljniju aplikaciju proceduralnim danas vise neces moc napravit...

Iskusni si, ne proturječim ti se. Ali zar ovo što ja govorim nije apstraktna klasa OOP-a ?

Steta sto PAWN objektni jezik,sa klasama i objektima je po meni puno lakse radit.