Osa 6

Osa 6 – Listat

Tässä osassa tutustumme listoihin. Lista on olio, joka sisältää muita olioita sisällään.

Edellisessä luvussa loimme hahmoille olioita, joilla on jokaisella oma muuttuja. Tämä toimii, jos pelissä on aina sama määrä olioita. Mutta entä, jos olioiden määrä muuttuu? Esimerkiksi väistelypelissä vihollisia tulee koko ajan lisää ja matopelissä madon häntä kasvaa.

Jotta voimme tehdä tämän, emme voi luoda omaa muuttujaa jokaiselle hahmo-oliolle. Sen sijaan voimme luoda listan, joka sisältää oliot.

Lukulista

Aloitetaan yksinkertaisella listalla, joka sisältää lukuja. Sellainen luodaan käyttämällä hakasulkuja:

Listan sisällä oleviin asioihin eli alkioihin voi viitata kirjoittamalla listan nimen ja hakasuluissa luvun. luvut[0] on ensimmäinen luku, luvut[1] toinen luku ja niin edelleen. (JavaScript käyttää niin kutsuttua nollaindeksointia, jossa listan ensimmäisen alkion järjestysluku eli indeksi on nolla.)

Kun olemme luoneet listan, voimme käyttää for of -silmukkaa käydäksemme sen läpi:

Silmukan sisällä oleva koodi suoritetaan kolme kertaa eli kerran jokaiselle listan alkiolle. Jokaisella suorituskerralla muuttuja luku asetetaan ensin viittamaan yhteen listan alkioista. Ensin luku on 1, toisella suorituskerralla se on 2 ja viimeisellä kerralla 3. Näytölle pitäisi siis tulostua luvut 1, 2 ja 3.

TODO: Tehtäviä, joissa luodaan listoja.

Lisääminen ja poistaminen

Listan tärkein hyöty on, että siihen voi lisätä asioita ja siitä voi poistaa asioita. Tutustumme nyt neljään tärkeimpään lisäämis- ja poistamiskomentoon.

push

.push() lisää alkion listan loppuun.

pop

.pop() poistaa alkion listan lopusta. Poistetun arvon voi tallettaa tarvittaessa muuttujaan.

shift

.shift() poistaa alkion listan alusta. Komennon nimi tulee siitä, että jokaista listan alkiota ikään kuin siirretään yksi taaksepäin (ja ensimmäinen alkio katoaa). Se alkio, joka oli aiemmin luvut[1] on nyt luvut[0].

Kuten .pop()-komennon kanssa, poistetun arvon voi tallettaa muuttujaan.

unshift

.unshift() lisää alkion listan alkuun. Kuten shiftin kanssa, alkiot siirtyvät listassa – tällä kertaa eteenpäin.

Kysymyksiä

splice

JavaScriptissä on omat komennot listan alkuun ja loppuun lisäämiselle ja poistamiselle. Listan keskelle lisäämiseen ja poistamiseen on kuitenkin vain yksi komento, .splice().

Tehtäviä

TODO: Tehtävä, jossa listaan lisätään ja siitä poistetaan arvoja

TODO: Tehtävä, jossa luodaan lista, lisätään siihen arvoja, ja iteroidaan sitä

TODO: Kysymys/monivalinta, jossa kysytään miltä lista näyttää operaatioiden jälkeen

Oliolista

Tähän mennessä listat ovat sisältäneet lukuja. Peleissä listoihin kuitenkin halutaan usein tallettaa hahmoja tai muita olioita.

Olion voi lisätä listaan samalla tavalla kuin luvunkin käyttämällä sopivaa komentoa, esimerkiksi .push()-komentoa:

Kun oliolistaan on lisätty haluttu määrä olioita, se voidaan käydä läpi for of -silmukalla:

Silmukassa muuttuja hahmo on väliaikainen nimi nyt käsittelyssä olevalle oliolle. Aina kun silmukka ottaa seuraavan olion käsittelyyn, muuttujakin muutetaan viittaamaan siihen.