JavaScriptová aplikace musà vÄtÅ¡inu Äasu pracovat s informacemi. Uvedeme dva pÅÃklady:
- Online obchod â informace se mohou týkat prodávaného zbožà a nákupnÃho vozÃku.
- Chatovacà aplikace â informace mohou zahrnovat uživatele, zprávy a mnoho dalÅ¡Ãho.
K ukládánà tÄchto informacà se použÃvajà promÄnné.
PromÄnná
PromÄnná je âpojmenovaný skladâ dat. PromÄnné můžeme použÃvat k ukládánà zbožÃ, návÅ¡tÄvnÃků i jiných dat.
K vytvoÅenà promÄnné v JavaScriptu se použÃvá klÃÄové slovo let.
NÞe uvedený pÅÃkaz vytvoÅà (jiným slovem deklaruje) promÄnnou s názvem âzprávaâ:
let zpráva;
Nynà do nà můžeme uložit nÄjaká data pomocà operátoru =:
let zpráva;
zpráva = 'Ahoj'; // uložÃme ÅetÄzec 'Ahoj' do promÄnné jménem zpráva
ÅetÄzec se nynà uložà do pamÄÅ¥ové oblasti, která je vyhrazena pro tuto promÄnnou. Můžeme k nà pÅistoupit pomocà názvu promÄnné:
let zpráva;
zpráva = 'Ahoj!';
alert(zpráva); // zobrazà obsah promÄnné
Abychom byli struÄnÄjÅ¡Ã, můžeme zkombinovat deklaraci promÄnné a pÅiÅazenà dat do jednoho Åádku:
let zpráva = 'Ahoj!'; // definujeme promÄnnou a pÅiÅadÃme jà hodnotu
alert(zpráva); // Ahoj!
Na jednom Åádku můžeme deklarovat i vÃce promÄnných:
let uživatel = 'Jan', vÄk = 25, zpráva = 'Ahoj';
Může se to zdát kratÅ¡Ã, ale nedoporuÄujeme to. Pro úÄely lepšà Äitelnosti radÄji uvádÄjte každou promÄnnou na novém Åádku.
VÃceÅádková varianta je trochu delÅ¡Ã, ale snadnÄji se Äte:
let uživatel = 'Jan';
let vÄk = 25;
let zpráva = 'Ahoj';
NÄkteÅà lidé definujà vÃce promÄnných i tÃmto vÃceÅádkovým stylem:
let uživatel = 'Jan',
vÄk = 25,
zpráva = 'Ahoj';
â¦Nebo dokonce tÃmto stylem âÄárka napÅedâ:
let uživatel = 'Jan'
, vÄk = 25
, zpráva = 'Ahoj';
Technicky vÅ¡echny tyto varianty dÄlajà totéž, takže je to jen otázkou osobnÃho vkusu a estetiky.
var namÃsto letVe starÅ¡Ãch skriptech můžete najÃt i jiné klÃÄové slovo: var namÃsto let:
var zpráva = 'Ahoj';
KlÃÄové slovo var znamená skoro totéž jako let. RovnÄž deklaruje promÄnnou, ale trochu jiným, âstaroÅ¡kolskýmâ způsobem.
Mezi let a var existujà drobné rozdÃly, ale ty nás zatÃm nezajÃmajÃ. PodrobnÄ je probereme v kapitole Starý pÅÃkaz âvarâ.
Analogie s reálným životem
Koncept âpromÄnnéâ můžeme snadno pochopit, když si ji pÅedstavÃme jako âkrabiÄkuâ na data, na nÞ je nalepen Å¡tÃtek s unikátnÃm názvem.
NapÅÃklad promÄnnou zpráva si můžeme pÅedstavit jako krabiÄku se Å¡tÃtkem "zpráva", v nÞ je hodnota "Ahoj!":
Do krabiÄky můžeme uložit libovolnou hodnotu.
Můžeme ji také zmÄnit tolikrát, kolikrát chceme:
let zpráva;
zpráva = 'Ahoj!';
zpráva = 'SvÄte!'; // hodnota se zmÄnÃ
alert(zpráva);
Když se hodnota zmÄnÃ, stará data jsou z promÄnné odstranÄna:
Můžeme také deklarovat dvÄ promÄnné a zkopÃrovat data z jedné do druhé.
let ahoj = 'Ahoj svÄte!';
let zpráva;
// zkopÃrujeme 'Ahoj svÄte!' z promÄnné ahoj do promÄnné zpráva
zpráva = ahoj;
// nynà obÄ promÄnné obsahujà stejná data
alert(ahoj); // Ahoj svÄte!
alert(zpráva); // Ahoj svÄte!
Stejná promÄnná může být deklarována pouze jednou.
Opakovaná deklarace stejné promÄnné ohlásà chybu:
let zpráva = "Toto";
// opakované 'let' vede k chybÄ
let zpráva = "Tamto"; // Syntaktická chyba: 'zpráva' již byla deklarována
PromÄnnou bychom tedy mÄli deklarovat jen jednou a pak se na ni odkazovat bez použità let.
Stojà za zmÃnku, že existujà tzv. ÄistÄ funkcionálnà programovacà jazyky, napÅÃklad Haskell, které nedovolujà mÄnit hodnotu promÄnných.
Když je v takových jazycÃch hodnota jednou uložena âdo krabiÄkyâ, zůstane tam navždy. Pokud chceme uložit nÄco jiného, jazyk nás pÅinutà vytvoÅit novou krabiÄku (deklarovat novou promÄnnou). Nemůžeme znovu použÃt starou.
AÄkoli to na prvnà pohled může vypadat trochu zvláštnÄ, i v takových jazycÃch je serióznà programovánà docela dobÅe možné. KromÄ toho existujà oblasti, napÅ. paralelnà výpoÄty, v nichž právÄ toto omezenà pÅinášà urÄité výhody.
Názvy promÄnných
V JavaScriptu platà pro názvy promÄnných dvÄ omezenÃ:
- Název musà obsahovat pouze pÃsmena, ÄÃslice nebo symboly
$a_. - Prvnà znak nesmà být ÄÃslice.
PÅÃklady platných názvů:
let uživatelskéJméno;
let test123;
Když název obsahuje vÃce slov, obvykle se použÃvá tzv. velbloudà notace. To znamená, že slova následujà hned za sebou a každé kromÄ prvnÃho zaÄÃná velkým pÃsmenem: můjVelmiDlouhýNázev.
ZajÃmavé je, že v názvech je možné použÃvat i znak dolaru '$' a podtržÃtko '_'. Jsou to obyÄejné symboly bez zvláštnÃho významu, podobnÄ jako pÃsmena.
Tyto názvy jsou platné:
let $ = 1; // deklarujeme promÄnnou s názvem "$"
let _ = 2; // a nynà promÄnnou s názvem "_"
alert($ + _); // 3
PÅÃklady nesprávných názvů promÄnných:
let 1a; // nesmà zaÄÃnat ÄÃslicÃ
let moje-jméno; // spojovnÃk '-' nenà v názvu povolen
PromÄnné s názvy jablko a JABLKO jsou dvÄ různé promÄnné.
Je dovoleno použÃt pÃsmena z jakéhokoli jazyka, vÄetnÄ pÃsmen z kyrilice, ÄÃnských znaků a podobnÄ, tÅeba takto:
let Ð¸Ð¼Ñ = '...';
let æ = '...';
Technicky zde nenà žádná chyba. Takové názvy jsou povoleny, ale podle mezinárodnà konvence se v názvech promÄnných použÃvá angliÄtina. I když pÃÅ¡eme malý skript, může mÃt pÅed sebou dlouhý život a lidé z jiných zemà si ho možná nÄkdy budou potÅebovat pÅeÄÃst.
Existuje seznam rezervovaných slov, které nemůžeme použÃvat jako názvy promÄnných, protože je již použÃvá samotný jazyk.
NapÅÃklad: let, class, return, function jsou rezervované.
NÞe uvedený kód ohlásà syntaktickou chybu:
let let = 5; // promÄnnou nelze pojmenovat "let", chyba!
let return = 5; // nelze ji ani pojmenovat "return", chyba!
use strictObvykle musÃme promÄnnou pÅed použitÃm definovat. Ve starých Äasech vÅ¡ak bylo technicky možné vytvoÅit promÄnnou pouze pÅiÅazenÃm hodnoty bez použità let. Aby byla zaruÄena kompatibilita se starými skripty, funguje to dodnes, pokud v naÅ¡ich skriptech neuvedeme use strict.
// poznámka: v tomto pÅÃkladu nenà "use strict"
Äslo = 5; // pokud promÄnná "Äslo" jeÅ¡tÄ neexistuje, je vytvoÅena
alert(Äslo); // 5
Je to Å¡patný zvyk a ve striktnÃm režimu vyvolá chybu:
"use strict";
Äslo = 5; // chyba: promÄnná Äslo nenà definována
Konstanty
Chceme-li deklarovat konstantnà (nemÄnÃcà se) promÄnnou, použijeme const mÃsto let:
const mojeDatumNarozenà = '18.04.1982';
PromÄnné deklarované pomocà const se nazývajà âkonstantyâ a nenà možné jim pÅiÅadit jinou hodnotu. Pokus o to by ohlásil chybu:
const mojeDatumNarozenà = '18.04.1982';
mojeDatumNarozenà = '01.01.2001'; // chyba, nelze zmÄnit konstantu!
Když má programátor jistotu, že hodnota promÄnné se nikdy nezmÄnÃ, může ji deklarovat pomocà const, aby tuto skuteÄnost pojistil a vÅ¡em jasnÄ sdÄlil.
Konstanty velkými pÃsmeny
Je Å¡iroce rozÅ¡ÃÅenou praktikou použÃvat konstanty jako názvy obtÞnÄ zapamatovatelných hodnot, které jsou známy jeÅ¡tÄ pÅed spuÅ¡tÄnÃm programu.
Názvy takových konstant se uvádÄjà velkými pÃsmeny a s podtržÃtky.
NapÅÃklad vytvoÅÃme konstanty pro barvy v tzv. âwebovémâ (hexadecimálnÃm) formátu:
const BARVA_ÄERVENÃ = "#F00";
const BARVA_ZELENÃ = "#0F0";
const BARVA_MODRÃ = "#00F";
const BARVA_ORANŽOVà = "#FF7F00";
// ...když si máme zvolit barvu
let barva = BARVA_ORANŽOVÃ;
alert(barva); // #FF7F00
Výhody:
BARVA_ORANŽOVÃse pamatuje mnohem lépe než"#FF7F00".- Je mnohem snadnÄjšà špatnÄ napsat
"#FF7F00"nežBARVA_ORANŽOVÃ. - PÅi Ätenà kódu dává
BARVA_ORANŽOVÃmnohem vÄtšà smysl než#FF7F00.
Kdy bychom mÄli použÃvat pro konstantu velká pÃsmena a kdy bychom ji mÄli pojmenovat obvyklým způsobem? UjasnÃme si to.
Být âkonstantaâ znamená prostÄ to, že hodnota promÄnné se nikdy nezmÄnÃ. NÄkteré konstanty jsou vÅ¡ak známy již pÅed spuÅ¡tÄnÃm programu (napÅÃklad hexadecimálnà hodnota Äervené barvy) a pak jsou konstanty, které se vypoÄÃtajà až za bÄhu programu, ale jejich vypoÄtená hodnota se nikdy nezmÄnÃ.
PÅÃklad:
const dobaNaÄÃtánÃStránky = /* doba, kterou trvá naÄÃst webovou stránku */;
Hodnota promÄnné dobaNaÄÃtánÃStránky nenà známa dÅÃve, než se stránka naÄte, proto je pojmenována obvyklým způsobem. Je to vÅ¡ak konstanta, protože se po pÅiÅazenà již nezmÄnÃ.
Jinými slovy, názvy konstant zapsané velkými pÃsmeny se použÃvajà jen pro pojmenovánà ânatvrdo uvedenýchâ hodnot.
Pojmenovávejte vÄci správnÄ
Když už mluvÃme o promÄnných, je tady jedna velice důležitá vÄc.
Název promÄnné by mÄl mÃt jasný a jednoznaÄný význam a mÄl by popisovat data, která jsou v promÄnné uložena.
Pojmenovávánà promÄnných je jednou z nejdůležitÄjÅ¡Ãch a nejsložitÄjÅ¡Ãch dovednostà v programovánÃ. Rychlý pohled na názvy promÄnných nám může prozradit, zda kód psal zaÄáteÄnÃk nebo zkuÅ¡ený vývojáÅ.
V reálných projektech vÄtÅ¡inu Äasu nezabere psanà nÄÄeho úplnÄ nového od základů, ale úprava a rozÅ¡iÅovánà již existujÃcÃho kódu. Když se vrátÃme k nÄjakému kódu poté, co jsme nÄjakou dobu dÄlali nÄco jiného, je mnohem jednoduššà najÃt potÅebné informace, když jsou vhodnÄ pojmenovány. Nebo, jinými slovy, když promÄnné majà vhodné názvy.
Než deklarujete promÄnnou, dobÅe si promyslete jejà název. BohatÄ se vám to vyplatÃ.
NÄkterá pravidla, která je vhodné dodržovat, jsou:
- PoužÃvejte názvy Äitelné ÄlovÄkem, napÅÃklad
uživatelskéJménonebonákupnÃVozÃk. - Zdržte se zkratek nebo krátkých názvů typu
a,b,c, leda že byste opravdu dobÅe vÄdÄli, co dÄláte. - Volte názvy co nejpopisnÄjšà a nejstruÄnÄjÅ¡Ã. PÅÃklady Å¡patných názvů jsou
datanebohodnota. Takové názvy nic neÅÃkajÃ. Je vhodné je použÃvat jen tehdy, když je z kontextu kódu naprosto zÅejmé, jaká data nebo hodnota se v promÄnné nacházÃ. - DohodnÄte se na pojmech se svým týmem a promyslete si je. Jestliže se návÅ¡tÄvnÃk stránky nazývá âuživatelâ, pak byste pÅÃsluÅ¡né promÄnné mÄli pojmenovat
aktuálnÃUživatelnebonovýUživatel, a neaktuálnÃNávÅ¡tÄvnÃknebonovýPánVeMÄstÄ.
Znà to jednoduÅ¡e? Bezpochyby ano, ale vytváÅet popisné a struÄné názvy promÄnných v praxi jednoduché nenÃ.
A jedna poznámka na závÄr. Existujà lÃnà programátoÅi, kteÅà mÃsto deklarace nové promÄnné majà sklon znovu použÃt starou.
Výsledkem je, že jejich promÄnné pÅipomÃnajà krabiÄky, do nichž lidé dávajà různé vÄci, aniž by se obtÄžovali zmÄnit Å¡tÃtek. Co je právÄ teÄ v krabiÄce? Kdo vÃ? MusÃme pÅijÃt blÞ a podÃvat se.
Takovà programátoÅi uÅ¡etÅà trochu Äasu deklaracà promÄnné, ale desetkrát vÃc Äasu ztratà pÅi ladÄnÃ.
PromÄnná navÃc je dobro, ne zlo.
Modernà JavaScriptové minifikátory a prohlÞeÄe dokážà kód dostateÄnÄ dobÅe optimalizovat, takže nenastane problém s výkonem. PoužÃvánà různých promÄnných pro různé hodnoty motoru dokonce pomůže optimalizovat váš kód.
ShrnutÃ
Deklarovat promÄnné pro ukládánà dat můžeme pomocà klÃÄových slov var, let nebo const.
letâ je modernà deklarace promÄnné.varâ je deklarace promÄnné ze staré Å¡koly. Obvykle ji vůbec nepoužÃváme, ale v kapitole Starý pÅÃkaz âvarâ probereme drobné rozdÃly oprotiletpro pÅÃpad, že byste je potÅebovali znát.constâ je jakolet, ale hodnota promÄnné se nesmà mÄnit.
PromÄnné by mÄly být pojmenovány tak, abychom snadno pochopili, co obsahujÃ.
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)