[4 Pamoka] Kintamieji

Šiame forume galima rasti pamokas, patarimus, skriptus ir kitą naudingą informciją.
Post Reply
User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

[4 Pamoka] Kintamieji

Post by aaarnas »

Šioje pamokoje daug plačiau išsiaiškinsime apie kintamuosius. Jau susipažinome su tai, kas yra kintamieji ir su kuo jie valgomi.

Jau žinome, kad norint sukurti kintamąjį rašome žodelį new, bet yra ne tik jis ir visi jie skiriasi savo galimybėmis. Plačiau apie kiekvieną:

new - pagrindinis, naudojamas sukurti kintamiesiems. Jis sukuria kintamąjį atmintyje ir pasibaigus funkcijai arba sąlygai jis ištrinamas iš atminties.
new leidžia kurti kiek nori kintamųjų, iš karto, atskiriant juos kableliu. Taip pat iš karto galima ir priskirti reikšmes.

Code: Select all

new health, armor, gravity, times = 2, maxspeed
static - pradedantieji gal nelabai gerai žinos jo tikslo, bet pamėginsiu paaiškinti. static kintamieji ypatingi tuo, kad juos sukūrus, jie neištrinami iš atminties ir veikia tik toje funkcijoje, kurioje jie buvo sukurti. Taip pat, antrą kartą iškvietus funkciją, reikšmė tame kintamajame bus tokia pati, kokia liko prieš tai buvusį įvykdymą! Tad, jei kintamasis sukurtas su static funkcijos pradžioje turi būti 0, tai privaloma prieš naudojimą jam priskirti 0 reikšmę, kitaip reikšmė gali būti ne tokia, kokios tikėjomės.
static naudojamas funkcijose, kurios yra iškviečiamos labai dažnai, pvz tokiose kaip client_PreThink, server_frame ir kitose. Šios funkcijos iškviečiamos mažiausiai 100 kartų per sekundę, dėl to kintamojo kūrimas ir trynimas atimtų bereikalingų resursų. Tam yra static kintamasis, kuris sukuriamas ir visada lieka priklausantis tai funkcijai, kurioje jis buvo sukurtas. Pvz:

Code: Select all

public server_frame(id) {static masyvas[1000]// darom kažką su masyvu}
Dabar įsivaizduokite: server_frame(id) iškviečiamas 1000 (taip, jis gali būti kviečiamas iki 1000 kartų (tai serverio FPS)) per sekundę. Sukurti atmintyje 1000 elementų masyvą reikalauja resursų. Jei mes kurtume ir trintume šį masyvą 1000 kartų per sekundę, tai stipriai apkrautume kompiuterį bereikalingu darbu. Tad static šiuo atveju ateina į pagalba, nes sukurti ir ištrinti kintamąjį mums reikės tik 1 kartą per visą programos vykdymą!

Kodėl static nenaudojamas visur? Jei jis toks geras, tikriausiai kilo toks klausimas. Dėl to, kad funkcijose, kurios iškviečiamos retai, tarkim 5 kartus per visą programos vykdymo metą, tai mes bereikalingai užkrausime atmintį, nes įvykdžius funkciją, kintamasis iš atminties nedings ir užims atmintį. Tad pagal idėją, static naudojamas tik tose vietose, kur iškvietimų skaičius per sekundę yra labai didelis.

Svarbu! static kintamuosius taip pat galima kurti daug, per kablelį, bet jų reikšmės nustatyti iš karto, kaip su new kintamaisiais nepavyks, jei priskirsime reikšmę tiesiai iš funkcijos. T.y.:

Code: Select all

static kintamasis = funckija(), skaicius
NETEISINGA!
Teisingas būtų taip:

Code: Select all

static kintamasis , skaicius = 5 // Paprastus skaičius priskirti aprašyme galime.kintamasis = funckija()
const - const skiriasi nuo kitų, kad tai yra nekeičiamas kintamasis, o konstanta. Konstantas gerai naudoti tada, kai jums reikia padaryti kokius nors nustatymus ir norite būti įsitikinę, kad reikšmė plugine niekur nepakis. Šiek tiek užbėgsiu už akių ir panaudosiu masyvus, nes tai geras pavyzdys (apie masyvus šioje pamokoje):

Code: Select all

const array_dydis = 5new array[array_dydis]
Kuriant masyvą jo dydis turi būti nekintantis skaičius (konstanta). Jei naudosite bet kurį kitą kintamojo tipą šitaip masyvo sukurti negalėsite.

enum - tai jau kiek sudėtingesnis. Jis skirtas kurti kintamųjų grupėms:

Code: Select all

enum {kintamasis1 = 0,kintamasis2,kintamasis3,kintamasis4}
kintamasis4 reikšmė bus 3, kintamasis3 - 2 ir t.t. Galima pakeisti ir skaičių tarp jų:

Code: Select all

enum (+= 100) { // Dar nesimokėte gal, bet += reiškia, kad prie esamos reikšmės pridedama kita reikšmėkintamasis1 = 245,kintamasis2,kintamasis3,kintamasis4}
kintamasis4 reikšmė bus 545.

Masyvai (arrays):

Masyvas tai yra toks kintamasis, kuriame gali būti daug reikšmių. Kiek daug mes nustatome. Tai tarsi duomenų saugykla. Kiekvienoje lentelėje galima nustatyti tam tikrus duomenis, o kiekvienas lentelės eilutės numeris turi savo skaičių. Štai kaip jie veikia:

Code: Select all

new array[5]
Čia sukuriame naują masyvą, kurio dydis yra 5. Tai reiškia, kad šiame kintamajame bus galima laikyti 5 skirtingas reikšmes.
Svarbu!. Kuriant masyvą skliausteliuose nurodome jo dydį (konstantą). Masyvo lentelių numeriai pradedami skaičiuoti nuo 0, ne vieno, tad paskutinės lentelės numeris bus 4. Parašius 5 bus rodoma klaida, nes 5 tai yra jau tolimesnė lentelės eilutė negu mes nustatėme eilučių skaičių. Tad mūsų kintamasis turi tokias eilutes - 0, 1, 2, 3, 4. Tarkime norime nustatyti porą reikšmių:

Code: Select all

array[1] = 6array[3] = 2
Dabar mūsų masyvas saugos tokius duomenis:
0. | 0 |
1. | 6 |
2. | 0 |
3. | 2 |
4. | 0 |
Tad dabar jei padarytume taip:

Code: Select all

new kintamasiskintamasis = array[1]
kintamasis įgautų reikšmę 6.

Galima kurti ir didesnius masyvus, kurie susidaro, ne tik iš eilučių, bet ir stulpelių. Jei darome taip:

Code: Select all

new array[2][5]array[0][0] = 5array[1][3] = 7array[0][2] = 2
Tai mūsų lentelė atrodys taip:
Image
Galima kurti ir dar didesnius masyvus. Tada jau bus ir keletą lentelių. Tikslesnis masyvo pavyzdys būtų toks:
Image
Tad masyvai naudojami labai dažnai ir paprastai be jų sunkiai apsieinama.

Kintamųjų tipai:

Liko vienas dalykas, tai kintamųjų tipai. Kintamieji gali būti 4 tipų:

Paprastas kintamasis, skirtas laikyti sveikiesiems skaičiams:

Code: Select all

new kintamasis = 16
Float: - jis parodo, kad šiame kintamajame bus laikomi trupmeniniai skaičiai (153.01531). Paprastame kintamajame tokių skaičių laikyti negalima.

Code: Select all

new Float:kintamasis = 1.1272
Bool: - jis parodo, kad kintamasis galės turėti tik 2 reikšmės: true : false. Reiškiasi kintamasis gali būti nustatytas tik į tiesą arba netiesą.

Code: Select all

new Bool:kintamasiskintamasis = true
String - iš esmės tai yra masyvas, bet jame laikome tekstinę informaciją:

Code: Select all

new string[] = "Kazkoks tekstas"
Čia sukuriame masyvą, kurio dydžio nenurodome ir jam iš karto priskiriame duomenis, t.y. tekstinę informaciją. Šie masyvai ypatingi tuo, kad jų dydis susideda iš raidžių skaičiaus ir + dar vienos eilutės, kurioje laikoma 0, kuris parodo, kad tai yra string. Tarkim jei pažiūrėsim kas yra string[3] mums parodys raidę k.

Šis gidas priklauso Amxmodx.lt forumui.
Bet koks šios informacijos platinimas be autoriaus sutikimo yra griežtai draudžiamas.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: Kintamieji

Post by newb »

Perskaiciau sita posta pagaliau :D Bet enumus kaip nezinojau kur naudot, taip ir nezinau...

Ir noriu pataisyti truputi:
aaarnas wrote: Svarbu! static kintamuosius taip pat galima kurti daug, per kablelį, bet jų reikšmės nustatyti iš karto, kaip su new kintamaisiais nepavyks. Reikšmę reikės nustatyti atskirai sukūrus kintamąjį.

Code: Select all

static kintamasis, skaičiuskintamasis = 5
Staticui iskarto negalima priskirti funckijos.
O taip viskas bus gerai:

Code: Select all

static string[] = "tekstas";static num = 3;
Negalima taip:

Code: Select all

static money = cs_get_user_money(id);

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Kintamieji

Post by aaarnas »

Dėkui apie static. Nebuvau nė pagalvojęs :)

Apie enum reikės padaryti atskirą pamoką, nes ten jie daugiau gali. Panaudojimas jų retas, bet kartais naudingas. Naudingiausia, kai reikia kurti masyvą su skirtingų tipų duomenimis jame. Analogiška record funkcijai paskalyje.

Beje dėl static panaudojimo. Juos geriausia naudoti funkcijose, kuriuos labai dažnai iškviečiamos, arba nuolat. Esmė tame, kad serveriui nereikia vargintis kurti naują kintamąjį, nes jis paliekamas atmintyje. Net reikšmė išsisaugo atmintyje, tad naujai įėjus į funkciją, static'o reikšmė bus tokia, kokia buvo nustatyta paskutinį kartą.
Jų naudojimas cikle naudingas tik jei pats visas ciklas dažnai iškvietinėjamas. Jei retai, geriau naudoti new.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: No registered users and 4 guests