Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Angelos poslato Jun 22, 2012, 19:08:04 POSLE PODNE

Naslov: [Savjet] Local ili Global string?
Poruka od: Angelos poslato Jun 22, 2012, 19:08:04 POSLE PODNE
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 :)
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: vlado_plavsic poslato Jun 22, 2012, 19:55:07 POSLE PODNE
Sad sam bas testirao to(zanimalo me) i radi.Sad ne znam kako ce se ponasati na mnogo komandi ali na 2 radi xD
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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";
}




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
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: N0NE poslato Jun 22, 2012, 20:30:33 POSLE PODNE
jednom koristio globalne stringove i vise nikad, moja preporuka nemoj  ;)
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: Angelos poslato Jun 22, 2012, 21:27:23 POSLE PODNE
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 .. :-\
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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..
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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...

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...
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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";
}

Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: Dude poslato Jun 23, 2012, 12:54:22 POSLE PODNE
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...
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: Joey_ poslato Jun 23, 2012, 13:25:01 POSLE PODNE
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.
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: 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.
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: Dude poslato Jun 23, 2012, 14:28:10 POSLE PODNE
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...
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: Vrabac poslato Jun 23, 2012, 14:39:07 POSLE PODNE
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 ?
Naslov: Odg: [Savjet] Local ili Global string?
Poruka od: FireMan poslato Jun 23, 2012, 14:40:44 POSLE PODNE
Steta sto PAWN objektni jezik,sa klasama i objektima je po meni puno lakse radit.