/ janturon.cz / Výuka / Javascript / Pole a cykly

Pole a cykly

Pole

Pole jsou proměnné, ke kterým lze přistupovat pomocí indexu (pořadového čísla). Pole se zapisuje do hranatých závorek, prvky se oddělují čárkou:

planets = ["Slunce","Merkur","Venuše","Země","Mars", "Jupiter","Saturn","Uran","Neptun"]; number = prompt("Zadej pořadové číslo planety"); alert("Planeta č."+number+" je "+planets[number]);

Prvky se číslují od 0, index 0 tak odpovídá Slunci, 1 Merkuru atd.

Objekt a jeho členy

Pole je objekt, což je další datový typ. Probrané datové typy (int, float, bool) jsou základní, objekt je složený. To znamená, že přes operátor přístupu (tečka) z něj můžeme zjišťovat proměnné (říká se jim vlastnosti properties) a funkce (říká se jim metody). Souhrnně vlastnostem a metodám říkáme členy (members). Jejich seznam najdete zde.

Ukázka vlastnosti: alert("Slunce má "+(planets.length-1)+" planet");

Ukázka metody: pluto = planets.push("Pluto"); alert(planets[pluto]+" má pořadové číslo "+pluto);

String jako objekt

Teď už to není možné déle tajit: string je taky objekt - seznam jeho členů je tady.

Má také vlastnost length, která vrací délku řetězce. Není to tak úplně náhoda, řetězce jsou v paměti uloženy jako pole znaků, proto na ně také můžeme nasadit hranaté závorky (totéž, co metoda charAt). Místo operátoru plus můžeme pro spojování řetězců volat metodu concat.

star = planets[0]; // Slunce u = star[2]; // u // nebo také přímo alert(planets[0][2]); // u // a dokonce také alert("Slunce"[2]); // u

for

Polem se dá procházet prvek po prvku následující konstrukcí (společná všem slušným jazykům): for(i=0; i<planets.length; i++) alert(planets[i]);

Vysvětlení: obecná syntaxe je for(init; test; next) příkaz;

Když se interpret dostane na tento řádek, provádí následující:

  1. spustí příkaz init (vždy)
  2. pokud platí podmínka test, provede příkaz (nebo blok příkazů ve složených závorkách, stejně jako u if); pokud neplatí podmínka test, next ani příkaz se už neprovádí a pokračuje se příkazy za for
  3. provede se příkaz, pak next a pokračuje se od bodu 2

V příkazech cyklu (nikde jinde) lze volat tyto speciální příkazy:

Následující cyklus vypíše všechny planety až po Jupiter a přeskočí Zemi:

for(i=0; i<planets.length; i++) { if(planets[i]=="Země") continue; if(planets[i]=="Saturn") break; alert(planets[i]); }

while

while je jednodušší zápis cyklu, kde chybí init a next. Obvykle se používá tam, kde neznáme předem počet opakování. Házejme například kostkou, dokud padá šestka:

function dice() { return Math.floor((Math.random()*6)+1); } var value = 0; while(value%6==0) value+= dice();

To lze zapsat i pomocí for (init; a next; lze vynechat):

for(var value=0; value%6==0;) value+= dice();

do-while

se používá, pokud chceme příkaz provést alespoň jednou. Syntaxe je do { příkaz; } while(test);

do { name = prompt("Zadej jméno"); } while(!name);

var

Teď, když tak samozřejmě pracujeme s bloky příkazů, je načese zmínit rozsah platnosti proměnné. V Javascriptu je proměnná "doma" tam, kde je deklarovaná pomocí var. Deklarace (tedy zapsání var před proměnnou) se provádí před (nebo spolu s) prvním použitím proměnné. Zapíšeme-li tedy var i;, znamená to: proměnná i platí pouze v tomto a všech vnořených blocích a nepřepíše žádnou proměnnou stejného jména ve vyších blocích.

Dokud jsme s bloky nepracovali, všechny proměnné byly globální (v nejvyšším bloku) a bylo to jedno. U bloků to ale může být problém:

function countFingers() { for(i=1; i<=10; i++) ; } i = "Javascript"; countFingers(); alert(i); // 11

Pokud by se Javascript takto choval vždy, nebylo by v něm možné zapsat nic většího než ukázkové příklady. Správně je to takto:

function countFingers() { for(var i=1; i<=10; i++) ; } var i = "Javascript"; countFingers(); alert(i); // Javascript

Zkrátka: i když to Javascript nevyžaduje, deklarace proměnných umožňuje předcházet chybám, které se pak velmi těžko dohledávají.

 

Otázky a úkoly: