Muuttujat
Oppimateriaalissa on aiemmin puhuttu muuttujista. Materiaalissa on
mainittu esimerkiksi sellaisia muutujia kuin width ja height. Mitä
muuttujalla oikein tarkoitetaan, ja miten voit luoda omia muuttujia?
Muuttuja on muistipaikka, jonne on tallennettu jokin arvo. Arvoa voidaan
muuttaa ja arvo voidaan hakea muuttujasta. Javaan pohjautuvassa
Processing-kielessä muuttuja tarvitsee tyypin sekä nimen:
Yllä oleva koodinpätkä luo int-tyyppisen muuttujan nimeltä luku ja
muuttujan arvoksi tallennetaan 100. Muuttujan tyyppi (int) tarkoittaa
kokonaislukua, eli muuttujaan voi nyt tallentaa kokonaislukuja kuten 1,
-2, 0, 99, 2147483647.
Muuttuja "luku" viittaa paikkaan, jonne tallennetaan arvo 100.
"Luku" on ikään kuin lokero, jonka sisällä olevaa arvoa voi hakea ja
muuttaa:
int luku = 100; // luodaan uusi muuttuja ja asetetaan sen arvoksi 100
luku = 40; // asetetaan muuttujan arvoksi 40
luku = 40/2; // asetetaan muuttujan arvoksi 40/2 eli 20
luku = luku + 2; // asetetaan muuttujan arvoksi luku + 2 eli 20 + 2 eli 22
luku = luku * 2; // asetetaan muuttujan arvoksi luku * 2 eli 22 * 2 eli 44
Uusi muuttuja luodaan kirjoittamalla muuttujan tyyppi, nimi,
yhtäsuuruusmerkki ja arvo.
tyyppi muuttujan_nimi = arvo;
Muuttuja muistaa vain uusimman asetetun arvon. Jos muuttujaan tallentaa
uuden arvon, vanha ei siis ole enää muistissa.
Muuttujan tyyppi
Processing-kielessä jokaiselle muuttujalle täytyy määritellä tyyppi.
Tiettyyn lokeroon voi tallentaa vain tietyn tyyppisiä asioita. Tyyppejä
ovat esimerkiksi kokonaisluvut, desimaaliluvut, merkkijonot tai
myöhemmin kurssilla esiteltävät luokat.
int
: kokonaisluku, esimerkiksi 0, -10, 255 tai 2018584.char
: kirjain, esimerkiksi 'a', 'b' tai 't'.float
: desimaaliluku, esimerkiksi 23.1, 1.0 tai -4.2.color
: väriarvo, esimerkiksi color(0, 22, 250)boolean
: totuusarvo, true tai false. Voit käyttää boolean-muuttujaa ehtolauseesi ehtona!String
: merkkijono, esimerkiksi "Moikka!" tai "Peli ohi!".
Tyyppi liittyy tietokoneen tapaan tallentaa tietoa. Tietokone
käsittelee kokonaislukua kuten 10 ja desimaalilukua kuten 3.14159 hieman
eri tavalla ja tästä syystä muuttujan tyyppi täytyy erikseen määritellä.
Processing varoittaa tyyppivirheistä esimerkiksi ilmoituksilla "Type
mismatch, 'float' does not match with 'int'" ja "Cannot convert from
float to int". Kokeile seuraavaksi alla olevia monivalintatehtäviä ja
koita määrittää muuttujalle oikea tyyppi.
Valitse oikea tyyppi tehtävän tyhjälle kohdalle
Muuttujat ja näkyvyys
Kokeile seuraavaa ohjelmaa. Mitä ohjelma tulostaa?
void setup() {
float a = 10;
}
void draw() {
println(a);
}
Kääntäjä antaa tässä tapauksessa virheilmoituksen "a cannot be resolved
to a variable". Muuttujaa a ei ole siis löydy, kun print-metodi yrittää
käyttää sitä. Tämä johtuu muuttujien näkyvyydestä. Muuttuja a on
määritelty setup-metodissa, jolloin se näkyy vain setup-metodille.
Tilanteen voisi korjata määrittelemällä muuttuja draw-metodissa:
void setup() {
}
void draw() {
float a = 10;
println(a);
}
Entä jos haluaisit kasvattaa muuttujaa a aina, kun draw-metodi ajetaan.
Kokeile lisätä muuttujan a arvoon yksi draw-metodin lopussa:
void setup() {
}
void draw() {
float a = 10;
println(a);
a = a + 1;
}
Nyt ohjelma tulostaa jatkuvasti arvoa 10. Muuttujan a arvoksi
määritellään jokaisen metodikutsun alussa 10, arvo tulostetaan ja sen
jälkeen muuttujan arvoa kasvatetaan yhdellä. Seuraavalla kerralla
muuttujan arvoksi asetetaan jälleen 10 ja muuttujan arvo tulostetaan.
Ratkaisu pulmaan on määritellä muuttuja heti ohjelman alussa, jolloin
muuttuja näkyy kaikissa metodeissa:
float a = 10;
void setup() {
}
void draw() {
println(a);
a = a + 1;
}
Nyt ohjelma tulostaa numeroita kymmenestä ylöspäin. Samaa tekniikkaa
voit käyttää liikkeen animointiin:
float x = 0;
void setup() {
size(400,400);
}
void draw() {
ellipse(x, height/2, 50, 50);
x = x + 1;
}
Nyt x kasvaa loputtomasti. Jos haluat palauttaa muutujan x arvon nollaan
sen jälkeen kun arvo on ylittänyt ruudin leveyden voit käyttää apuna
ehtolauseita. Ehtolauseet esitellään vasta seuraavassa kappaleessa,
joten tässä on pieni kurkistus tulevaan:
float x = 0;
void setup() {
size(400,400);
}
void draw() {
ellipse(x, height/2, 50, 50);
x = x + 1;
if ( x > width) {
x = 0;
}
}
Virheet muuttujien tyypeissä ja näkyvyydessä ovat tyypillisiä haasteita
ohjelmoinnissa. Kääntäjän virheilmoitukset auttavat virheiden
metsästyksessä ja edelliset esimerkit käsittelivät tyypillisiä
virhetilanteita.
Ohjelmointiharjoitus
Piirrä ympyrä jonka läpimitta vaihtelee satunnaisesti välillä 50-100.
- Kirjoita seutup- ja draw-metodit.
- Arvo draw-metodin alussa numero välillä 50-100 ja tallenna se muuttujaan
- Piirrä draw-metodissa ympyrä ja käytä läpimittana äsken arpomaasi muuttujaa.