Hlavní moderátor Popular Post vEnd 279 Odesláno: 1. Červenec, 2016 Hlavní moderátor Popular Post Share Odesláno: 1. Červenec, 2016 Obtížnost: Osnova:1. Úvod, co je to proměnná2. Deklarace (vytvoření) proměnné3. Přiřazování hodnot4. Datové typy (tagy)5. Lokální a globální proměnná6. Závěr 1. ÚvodZdravím Vás, tohle je první ze série návodů věnujících se základům jazyka Pawn. Cílem těchto návodů je seznámit Vás se strukturami tohoto jazyka, s jeho syntaxí a s jeho využitím v praxi. Tento návod se bude věnovat proměnné. Co je to proměnná? Pod pojmem proměnná si můžeme představit nějaké místo v paměti, které má svůj název a do kterého si pro naše potřeby ukládáme hodnoty. Všichni proměnné už známe, a to z matematiky – zde proměnné jako x a y používáme nepřetržitě. A funguje to i podobně – v matematice za ně můžeme dosazovat různé hodnoty, v programování do nich také ukládáme různé hodnoty. 2. Deklarace (vytvoření) proměnnéPrvním naším krokem bude deklarace proměnné. Když mluvíme o deklaraci proměnné, máme na mysli, víceméně, její vytvoření. To provedeme následovně: . new id; . Pomocí slova new deklarujeme nové proměnné. Jinak to nejde, jazyk to od nás vyžaduje. id je název (identifikátor) naší nové proměnné. V názvu můžeme používat standardní písmena (A až Z, a až z), číslice (0 až 9) a podtržítko (_). Název bychom měli volit tak, aby odpovídal tomu, k čemu budeme proměnnou potřebovat (např. penize – pro ukládání peněz apod.) Středníkem (;) deklaraci ukončíme. Jazyku tak sdělíme fakt, že jsme s tímto příkazem (s deklarací proměnné) skončili. Takhle to funguje i u jiných příkazů, ne jenom u deklarací. Pokud potřebujeme deklarovat více proměnných najednou, je to možné provést tak, že jednotlivé názvy oddělíme čárkou, takhle: . new id, penize, score; . Takto jsme vytvořili 3 proměnné naráz. 3. Přiřazování hodnotTeď už víme, jak proměnnou vytvořit. Jak do ní ale uložím hodnotu? To udělám pomocí operátoru rovnítko / rovná se (=). . id = 5; . Na levé straně (tzv. lvalue) máme proměnnou, do které chceme ukládat, poté následuje rovnítko, které nám určí, že do proměnné ukládáme hodnotu, a nakonec přichází samotná hodnota (tzv. rvalue). Hodnotou může být číslo, ale také jiná proměnná nebo výraz. Stejně jako deklaraci, tak i tento příkaz zakončíme středníkem. Ono středníkem budeme ukončovat téměř všechno, ale to brzy samo vyjde najevo. Pokud bychom chtěli přiřadit hodnotu už při deklaraci, tak i to nám Pawn dovoluje: . new id = 7; new id = 1, penize = 5000, score = -100; //znak mínus (-) před hodnotou nám značí zápornou hodnotu . Pro zajímavost (rozklikněte spoiler): Když proměnné u deklarace žádnou hodnotu neurčíme, je to automaticky nula. Hodnota proměnné u deklarace se nazývá výchozí/defaultní hodnota a tomu, když proměnné nějakou hodnotu při deklaraci určíme, se říká inicializace proměnné. 4. Datové typy (tagy)Už umíme proměnnou vytvořit a přiřadit jí hodnotu. Teď si musíme říct něco o datových typech. Datový typ nám určuje, jaké hodnoty můžeme do proměnné uložit. Může se jednat o běžná celá čísla (ty jsme používali do teď), ale pak také můžeme ukládat čísla s desetinnou čárkou, různé texty, znaky apod. Čím se nám to bude lišit, když budeme chtít do proměnné uložit např. číslo s desetinnou čárkou? Bude se to lišit způsobem deklarace. Vyjmenujme si všechny běžné datové typy a způsob, kterým je budeme deklarovat. a) Celá čísla (7, 666, -5, -114 apod.) new cela_cisla; //deklarujeme tak, jak jsme se před chvílí naučili cela_cisla = 7; . b ) Reálná čísla – čísla s desetinnou čárkou (3.14159, 10.254, -177.8, -23.23 apod.) new Float:realna_cisla; //před název proměnné jsme přidali tzv. tag, a to tag "Float:" realna_cisla = 3.14159; //tečka (.) nám v programování představuje desetinnou čárku . c) Logické hodnoty (true a false) Logické hodnoty máme jen dvě, a to pravda (true) a nepravda (false). . new bool:logicke_hodnoty; //doplníme tag "bool:" logicke_hodnoty = true; . d) ZnakyZnakem může být cokoliv, co najdete na klávesnici – písmeno, číslice, vykřičník, pomlčka atd. Deklarace se neliší od celých čísel, ale ukládání ano! . new znak; //stejné jako u celých čísel znak = 'a'; //ukládaný znak musíme vložit mezi apostrofy (') . e) Řetězec/string ("abcd1234?!", "jak se máš?", "jsem programátor" apod.)Řetězec není nic jiného než posloupnost několika znaků. Jsou to slova, věty, hesla, vše, co nás napadne. Liší se deklarací i ukládáním! . new retezec[10+1]; //v hranatých závorkách [] udáváme délku řetězce, to je ta 10, a navíc přičteme ještě jedničku kvůli potřebám jazyka Pawn retezec = "abcd1234?!"; //ukládaný řetězec znaků musíme vložit mezi uvozovky (") . Pro zajímavost (rozklikněte spoiler): Řetězec není tak úplně proměnná, nýbrž tzv. pole, ale o tom jindy.Způsobů ukládání hodnot do řetězců je více, např. pomocí funkcí format nebo strcat, ale o tom jindy. Těch tagů je omnoho více, ale když teď známe jejich princip, nebude těžké se vypořádat ani s těmi ostatními. 5. Lokální a globální proměnnáProměnná se dělí na dva typy podle toho, kde ji deklarujete. Globální proměnná se nejčastěji deklaruje nahoře ve scriptu, těsně pod #include a #define. S touto proměnnou můžete pracovat všude ve scriptu. Oproti tomu lokální proměnná se deklaruje v určitém bloku (bloky nám určují složené závorky { }) a má platnost pouze v něm a v podřazených blocích. Názorná ukázka: . public OnPlayerConnect(playerid) { if(playerid == 0) { new id; id = 5; //bude fungovat, tohle je stejný blok, kde je deklarace if(IsPlayerInAnyVehicle(playerid)) { id = 0; //bude fungovat, tohle je podřazený blok } } id = 7; //nebude fungovat, zahlásí nám to chybu, protože tohle už je nadřazený blok } . 6. ZávěrA takhle jsme došli ke konci návodu o proměnné. Dnes jsme se dozvěděli, co je to proměnná, k čemu slouží, jak do ní ukládat hodnoty a výrazy, jaké hodnoty do ní lze ukládat a jak ji rozdělujeme dle platnosti. Navíc jsme si také ukázali, jak psát do kódu komentáře, to jsou ty poznámky, které jsme uvedli za znaky // (dvě lomítka). Za ně si lze psát své vlastní poznatky, připomínky atd. Ještě jednou říkám, že tento návod slouží pro úplné začátečníky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený. 1 6 Link to comment Share on other sites More sharing options...
PinkSmoothie 104 Odesláno: 1. Červenec, 2016 Share Odesláno: 1. Červenec, 2016 nemozme true/false deklarovat aj to normalnej premenner? napr. new tom; tom = 1; ? Ja som to asi vzdy takto robil navod urcite dobry, vsetko si jednoducho vysvetlil, ak budes pokracovat tak sa mi to urcite zide(aj ked navodov je vela) Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 1. Červenec, 2016 Author Hlavní moderátor Share Odesláno: 1. Červenec, 2016 (upraveno) Jistě, je možné používat i 1 jako true a 0 jako false, ALE pak bys neměl u té deklarace dávat ten bool:, jinak by ti to házelo varování. (Ono v jiných jazycích se používají bool proměnné, protože takové proměnné zabírají v paměti jenom jeden bajt, jenže v Pawn je to prakticky jedno, tam má každá proměnná, nehledě na typ, 4 bajty.) A díky. Edited 1. Červenec, 2016 by vEnd Link to comment Share on other sites More sharing options...
Tanga 131 Odesláno: 17. Červenec, 2018 Share Odesláno: 17. Červenec, 2018 Predpokladám, že úplný začiatočník s programovaním by si chcel overiť funkčnosť jeho premenných, no nevedel by ako na to. Na vypisovanie informácií na konzolu sa používa funkcia printf(). Prekopírujte, skompilujte, spustite a preštudujte si nasledujúci kód a malo by vám to byť jasné. #include <a_samp> // obsahuje definiciu funkcie printf main() { printf("Tento text sa zobrazi na konzole."); // vypise obycajny text new number = 42; printf("Hodnota cisla je: %d.", number); // vypise hodnotu premennej typu cislo new string[]= "simple message"; // o stringoch sa viac dozviete v dalsich z vEndovych navodov printf("String obsahuje text: %s a nase predosle cislo bolo: %d.", string, number); new character = '@'; printf("Nejaky znak: %c.", character); // @ new Float:real = 0.61; printf("Nejake krasne desatinne cislo: %f", real); new pole[] = { 1, 2, 3 }; // opat vec na ktoru narazis v nasledujucom vEndovom navode printf("%d %d %d", pole[2], pole[1], pole[0]); } Link to comment Share on other sites More sharing options...
Globální moderátor Hip 191 Odesláno: 18. Červenec, 2018 Globální moderátor Share Odesláno: 18. Červenec, 2018 (upraveno) On 1. 7. 2016 at 20:56, vEnd said: Když proměnné u deklarace žádnou hodnotu neurčíme, je to automaticky nula Nejsem si jist jak u pawn, ale všeobecně když do proměné nic neuložíš, tak je hodnota null. V tomto případě bych se i vsadil že to tak skutečně bude, protože datový typ se určuje podle datového typu uložené informace. Tato poznámka je chybná, prosím, neřiďte se podle ní. Díky Edited 28. Červenec, 2018 by Hip Chybná rada. 4 Link to comment Share on other sites More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 18. Červenec, 2018 Author Hlavní moderátor Share Odesláno: 18. Červenec, 2018 V Pawn je výchozí hodnota po deklaraci 0. Mám pocit, že to jde dokonce nastavit v překladači, co má být výchozí hodnotou. Zkus si to vyzkoušet, než to budeš zpochybňovat, nováčky to pak mate. Link to comment Share on other sites More sharing options...
Globální moderátor Hip 191 Odesláno: 18. Červenec, 2018 Globální moderátor Share Odesláno: 18. Červenec, 2018 před 1 hodinou, vEnd said: V Pawn je výchozí hodnota po deklaraci 0. Mám pocit, že to jde dokonce nastavit v překladači, co má být výchozí hodnotou. Zkus si to vyzkoušet, než to budeš zpochybňovat, nováčky to pak mate. ah so... Každopádně napadlo mě to proto, protože jsem zde neviděl hodnotu null. Řekl bych že to do základů patří :-) Dík za osvětlení Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now