3.1 Muuttujat ja tietotyypit
Yhteenveto
- Muuttuja on muistipaikka, johon ohjelman suorituksen aikainen tieto tallennetaan.
- Kaikki ohjelman käyttämät muuttujat ensin esiteltävä, ennen kuin niitä voi käyttää. Esittely tehdään vain kerran.
- Esittelyn yhteydessä kerrotaan muuttujan tietotyppi, joka kertoo minkä tyyppistä tietoa ohjelman käyttämiin muuttujiin voidaan tallentaa.
- Esittelyn yhteydessä muuttujalle annetaan ainutkertainen nimi. Huomio: Muuttujan nimissä ei voi käyttää merkkejä: å, ö, ä, välilyöntejä ja erikoismerkkejä.
- Yhteen muuttujaan voidaan tallentaa vain yksi tieto kerrallaan. Muuttujan saama arvo tallennetaan muuttujaan yhtäsuuruusmerkin avulla.
- Mikäli muuttujalle sijoitetaan uusi tieto, niin vanha tieto poistuu. Uuden tiedon sijoitus voidaan tehdä samalle muuttujalle useamman kerran samassa ohjelmassa, mutta esittely vain kerran.
- Kun sijoitat muuttujille arvoja, niin kokonaisluvut kirjoitetaan sellaisenaan, desimaaliluvut kirjoitetaan pisteen avulla, merkkijono kirjoitetaan lainausmerkkien (" ") sisälle, merkit kirjoitetaan heittomerkkien (' ') sisälle ja totuusarvoissa käytetään sanoja true tai false.


|
// Ohjelman tehnyt: e-Oppi Oy
// 29.1.2017
int x = 250;
int y = 100;
void setup () {
size(450,450); // Ikkunan koko
background(255); // Taustaväri valkoinen
textSize(20); // Tekstin koko 20
fill(0); // Tekstin väri musta
}
void draw () {
int Nimi1 = 100; // Kokonaisluku
float Nimi2 = 4.65; // Desimaaliluku
String Nimi3 = "Siiri Silakka"; // Merkkijono
char Nimi4 = '%'; // Merkki
boolean Nimi5 = false; // Totuusarvo
text(Nimi1,50,50); // Tulosta muuttujien arvot
text(Nimi2,50,100);
text(Nimi3,50,150);
text(Nimi4,50,200);
text("Hei "+Nimi3+", mitä kuuluu?",50,250);
text("Luvut ovat:"+Nimi1+" ja "+Nimi2,50,300);
ellipse(x,y,Nimi1,Nimi1);
}
Johdanto
Ohjelmassa käsitellään tietoa ja se voitava tallentaa ohjelman suorituksen aikana johonkin. Tallennettava tieto voi olla esimeriksi numerotietoa tai tekstitietoa. Tämä ohjelman suorituksen aikainen tallennettava tieto tallennetaan muuttujiin. Muuttuja on ohjelmassa määritelty sana tai merkkijono, johon tietoa tallennetaan sijoituslauseella. Tutkitaan aluksi kuinka erilaisia tietotyyppejä (numerotieto ja tekstitieto) käsitellään tekstin tulostuksen yhteydessä.
Lähdetään esimerkistä liikkeelle. Tulostetaan aluksi numeroita text-komennolla. Tehdään seuraava ohjelma.
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(300,300); // Määritellään ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Tekstin väri musta
textSize(30); // Tekstin koko 30 px
}
void draw() {
text(" 1+2+3 ",100,60);
text( 1+2+3,100,100);
text(" 1+2+3 "+1+2+3,100,140);
text(" 1+2+3 "+(1+2+3),100,180);
text( 1+2+3+" 1+2+3 ",100,240);
}
Kun ohjelma ajetaan, niin havaitaan jotain mielenkiintoista. Miksi ei joka rivillä tulostu 1 + 2 + 3?
Tuloste |
Merkitys |
---|---|
1+2+3 |
Ensimmäinen rivi on normaali tulostuskomento eli teksti - tässä tapauksessa numerot – kirjoitetaan lainausmerkkien sisään ja lopputulos on niin kuin pitääkin. |
6 |
Tässä kirjoitimme tekstiä ilman lainausmerkkiä ja ohjelma ei ilmoittanut virhettä, miksi? Syy on se, että on olemassa erilaisia tietotyyppejä: tekstitieto ja kokonaislukutieto. Tässä ”teksti” onkin kokonaisluku, ja lukujahan voi normaalisti laskea yhteen eli 1 + 2 + 3 = 6, ja siksi tulostui 6. |
1+2+3 123 |
Nyt yhdistimme kaksi edellistä komentoa ja nyt ei tulostunut 6 loppuun, miksi? Syy on se, että plus-merkkiä käytetään myös tekstitiedon ja kokonaislukutiedon erottimena. Ensimmäinen plus-merkki tekstitiedon jälkeen tulkitaan erottimeksi. Tämä ensimmäinen erotinmerkki, muuttaa myös loput plusmerkit erotinmerkeiksi. Kun 1, 2 ja 3 tulostetaan peräkkäin ilman välilyöntiä (erotinmerkki ei tulostu), niin lopputuloksena on 123. |
1+2+3 6 |
Tässä on tehty korjaus edelliseen komentoon eli lisäämällä sulut lukujen ympärille komentojen suoritusjärjestys muuttuu ja sulkujen sisällä olevat luvut summataankin nyt yhteen. Ainoastaan sulkujen edessä oleva plusmerkki on erotinmerkki. |
6 1+2+3 |
Lainausmerkkien edessä olevat plusmerkit ovat viimeistä plusmerkkiä lukuun ottamatta yhteenlaskuja. Syy tähän on komentojen suoritusjärjestys. Koska ensimmäinen plus-merkki on yhteenlasku, niin muutkin plusmerkit ovat yhteenlaskuja, jos vain mahdollista. |
Kun kirjoitamme tekstiä lainausmerkkien sisälle, niin se on tekstitietoa. Mutta jos kirjoitamme numeroita ilman lainausmerkkejä, niin se on numerotietoa. Jos esimerkiksi haluamme kirjoittaa lauseen: Lukujen 5 ja 7 summa on 12, siten että luvut ovat numerotietoa ja teksti on tekstitietoa, niin tulostuskomento on tällöin muotoa.
text("Lukujen "+5+" ja "+7+" summa on "+(5+7),100,100);
Teksti kirjoitetaan lainausmerkkien sisälle, mutta numerotietoa ei tarvitse kirjoittaa lainausmerkkien sisälle. Numerotieto ja tekstitieto erotetaan toisistaan plus-merkin avulla. Tosin plus-merkin avulla suoritetaan myös lukujen väliset laskutoimitukset. Eli tällä tulostuslauseella tulostetaan luvut 5 ja 7, sekä kirjoitettu teksti ja lisäksi ohjelma vielä laskee lukujen summan. Eli tulostus näyttää tältä.
Tulostuslauseen merkitys on seuraava.
Muuttujat käyttäytyvät ohjelmassa samalla tavalla. Kun seuraavaksi määrittelemme muuttujat, myös ne on tulostettava ilman lainausmerkkejä.
Muuttujat
Määritellään aluksi Processing-ohjelmoinnin yleisimmät tietotyypit. Edellisessä esimerkissä puhuttiin vain kokonaisluku- ja tekstitietotyypeistä, mutta Processing-ohjelmoinnissa on määritelty enemmänkin tietotyyppejä, ne ovat seuraavat:
Tietotyyppi |
Määrittely |
Muuttujan arvo |
---|---|---|
Kokonaisluku |
int |
15 |
Desimaaliluku |
float |
3.14 |
Merkkijono |
String |
"Matti Meikäläinen" |
Merkki |
char |
'Ä' |
Totuusarvo (true tai false) |
boolean |
true |
Olisiko mahdollista määritellä ohjelmaan jokin muistipaikka, johon ohjelman käyttämä tieto voitaisiin tallentaa? Kyllä voidaan, mutta siinä on rajoite. Kokonaisluvut voidaan tallentaa vain kokonaisluku muistipaikkaan, desimaaliluvut voidaan tallentaa vain desimaaliluku muistipaikkaan, merkkijonot voidaan tallentaa vain merkkijonomuistipaikkaan ja niin edelleen. Voit ajatella esimerkiksi, että kokonaisluku laitetaan siniseen laatikkoon, desimaaliluku laitetaan keltaiseen laatikkoon, merkkijono laitetaan vihreään laatikkoon ja niin edelleen. Oheinen kuva havainnollistaa asiaa.
Sitten on vielä toinenkin rajoite: Yhteen laatikkoon eli muistipaikkaan mahtuu vain yksi tieto kerrallaan. Jos muistipaikkaan laitetaan uusi tieto, niin vanha tieto häviää. Tälle muistipaikalle on annettu ohjelmoinnissa nimi ja se on nimeltään muuttuja.
Ohjelmoinnissa kaikki ohjelman käyttämät muuttujat pitää ensin esitellä, ennen kuin niitä voidaan käyttää. Se tapahtuu esimerkiksi seuraavasti:
int Muuttuja1;
Aluksi siis kerrotaan minkälaista tietoa muuttujaan voi tallentaa (int, float, String, char tai boolean) ja sitten vasta annetaan muuttujalle nimi. Muuttujan nimessä käy kirjaimet a,b,c,…,z, ja A,B,C,…Z sekä numerot 0,1,2,…,9. Mutta et voi käyttää esimerkiksi skandimerkkejä: ä, ö ja å, etkä välilyöntejä, et voi myöskään käyttää useimpia erikoismerkkejä, poikkeuksena alaviiva ja dollarimerkki. Kun muuttuja on esitelty, niin siihen voidaan sijoittaa oikeantyyppinen tieto sijoituslauseella, esimerkiksi:
Muuttuja1 = 15;
On myös mahdollista yhdistää esittely ja sijoitus samaan lauseeseen, jolloin lause näyttää tältä:
int Muuttuja1 = 15;
Vastaavalla tavalla kaikki taulukon esimerkin mukaiset muuttujat voidaan esitellä ja sijoittaa siihen arvot seuraavasti.
int Muuttuja1 = 15;
float Muuttuja2 = 3.14;
String Muuttuja3 = "Matti Meikäläinen";
char Muuttuja4 = 'Ä';
boolean Muuttuja5 = true;
Esittely tehdään ohjelmassa vain kerran. Sijoitus voidaan kuitenkin tehdä useamman kerran. Tällöin vain viimeisin tieto säilyy muuttujassa. Processing ohjelmoinnissa on seuraavia sääntöjä, jotka koskevat muuttujien nimeämistä:
- Nimi alkaa kirjaimella, alaviivalla tai dollarimerkillä
- Seuraava merkki saa edellisten lisäksi olla myös numero
- Kirjainten koolla on merkitystä (esimerkiksi: Piiri ja piiri on eri asia).
- Nimi ei saa olla ohjelmointikielen varattu sana eli komento
- Nimellä ei ole pituusrajoitusta
- Nimen on oltava ainutkertainen
Yhteenvetona muuttuja esittelystä ja arvon sijoittamisesta:

Jokainen lause loppuu aina puolipisteeseen. Jos määrittelet muuttujan void draw ( ) -lohkossa, niin muuttuja on voimassa vain tässä lohkossa. Sanotaan, että muuttuja on paikallinen muuttuja.
Jos määrittelet muuttujan ohjelman alussa, ennen void setup ( ) -lohkoa, niin muuttujan on voimassa koko ohjelman ajan. Sanotaan, että muuttuja on globaalimuuttuja.
Huomaa, että sijoittaessa arvoja muuttujiin desimaaliluvussa (float) käytetään pistettä, merkkijonossa (String) lainausmerkkejä ja merkissä (char) heittomerkkiä.
Kokonainen ohjelma, jossa edellä mainitut muuttujat ovat käytössä, on seuraava:
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(450,300); // Ikkunan koko
background(255); // Taustaväri valkoinen
textSize(30); // Tekstin koko 30
fill(0); // Aseta tekstin väriksi musta
}
void draw() {
int Muuttuja1 = 15; // Kokonaisluku
float Muuttuja2 = 3.14; // Desimaaliluku
String Muuttuja3 = "Matti Meikäläinen"; // Merkkijono
char Muuttuja4 = 'Ä'; // Merkki
boolean Muuttuja5 = true; // Totuusarvo
text(Muuttuja1,10,50); // Tulostetaan muuttujat
text(Muuttuja2,10,100);
text(Muuttuja3,10,150);
text(Muuttuja4,10,200);
text(""+Muuttuja5,10,250);
// Huomio: Totuusarvo-muuttujalla erilainen tulostus
}
Ohjelman suoritus näyttää tältä.

Palataan aikaisempaan yhteenlaskuesimerkkiin. Se voidaan muuttujien avulla kirjoittaa seuraavasti.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(600,200); // Määritellään ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Tekstin väri musta
textSize(30); // Tekstin koko 30 px
}
void draw() {
int luku1 = 5;
int luku2 = 7;
text("Lukujen "+luku1+" ja "+luku2+" summa on "+(luku1+luku2), 100, 100);
}
Kun ohjelma ajetaan, niin ohjelman tulostus näyttää samanlaiselta.
Ohjelma toimii samalla tavalla kuin äskenkin, mutta nyt emme tarvitse enää lukuja sijoittaa tulostuslauseeseen vaan lukujen sijoitus on tehty ennen tulostusta muuttujiin. Voit kokeilla muuttaa lukuarvoja ja ohjelma toimii halutunlaisesti millä tahansa muuttujan arvolla.
Esimerkki: Muuttujat piirtokomennossa
Voimme käyttää muuttujia piirtokomennoissa seuraavasti.
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(250,250); // Määritellään ikkunan koko
background(255); // Taustaväri valkoinen
fill(255,0,0); // Täyttöväri punainen
}
void draw() {
int x = 150;
int y = 50;
int halkaisija = 100;
ellipse(x,y,halkaisija,halkaisija);
}
Ohjelman suoritus näyttää tältä.
Ohjelma siis piirtää punaisen ympyrän paikkaan (150,50), jossa ympyrän koko eli ympyrän halkaisija on 100 pikseliä. Piirtokomennossa voimme käyttää nyt kuvaavia sanoja eli muuttujia. Piirtokomennoissa on käytettävä vain kokonaislukumuuttujia. Kun muutat muuttujien arvoja, niin ympyrän paikka ja koko myös muuttuvat.
Esimerkki: Erotinmerkki muuttujien välillä
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(300,200); // Määritellään ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Täyttöväri musta
textSize(24); //Fontin koko
}
void draw() {
String a = "Hei, ";
String b = "Mitä ";
String c = "kuuluu?";
text(a+b+c,10,100);
}
Kun ajat ohjelman, niin se näyttää tältä.
Eli voit yhdistää erilaisia String - tyyppisiä muuttujia samaan tulostuslauseeseen lisäämällä muuttujien väliin plusmerkin. Tässä plus-merkki toimii erottimena.
TextWidth
|
// Ohjelman tehnyt: e-Oppi Oy
// 30.1.2017
void setup() {
size(300,200); // Määritellään ikkunan koko
background(255); // Taustaväri valkoinen
fill(0); // Täyttöväri musta
textSize(24); //Fontin koko
}
void draw() {
String a = "Hei, ";
String b = "Mitä ";
String c = "kuuluu?";
text(a,10,100);
text(b,10+textWidth(a),100);
text(c,10+textWidth(a+b),100);
}
Ohjelma tulostaa seuraavaa.
