wiki:Muuttujat
Last modified 7 years ago Last modified on 2012-06-26 10:45:09

Apuja ohjelmointiin » Muuttujat, perustyypit ja operaatiot

Tässä ohjeessa käydään läpi muuttujan ja tyypin käsitteet. Lisäksi käydään läpi tavallisia operaatioita.

1. Mikä on muuttuja

Ohjelman suorituksen aikana tarvittavaa tietoa voidaan tallentaa muuttujiin. Muuttuja on ohjelmointikielten termi sille, että jokin asia laitetaan "ylös muistiin". Normaalissa elämässä esimerkiksi ohi ajavista autoista voidaan pitää lukua: 1, 2, 3, ja niin edelleen. Aina kun auto ajaa ohi, lisätään edelliseen muistissa olevaan lukuun yksi.

Muuttujassa oleva tieto voi muuttua ohjelman aikana - siksi sitä sanotaan muuttujaksi! Ihan kuten esimerkissämme autojen määrä muuttuu sitä mukaan kun autoja tulee lisää. Ohjelma tunnistaa muuttujan sille annetun nimen perusteella. Esimerkissämme muuttujan nimi voisi olla vaikkapa ohiAjaneidenAutojenMaara. Muuttujaan voidaan tallentaa vain määritellyn tyypin mukaisia arvoja. Esimerkissämme muuttujan tyypiksi kävisi kokonaisluku.

2. Muuttujan määrittely

Muuttuja määritellään kirjoittamalla ensin sen tyyppi ja perään nimi välilyönnillä erotettuna. Lause päättyy puolipisteeseen, kuten kaikki muutkin C#-kielen lauseet.

Esimerkkejä:

int x;
string teksti;
PhysicsObject pallo;

Muuttujalle voidaan myös asettaa lähtöarvo:

int x = 5;
string teksti = "palturia";

3. Muuttujan arvon asettaminen

Kun muuttuja on esitelty, sen arvoa voidaan muuttaa vapaasti, kunhan uusi arvo on samaa tyyppiä kuin muuttuja.

x = 10;   // toimii
int x;
x = "tekstiä";   // antaa virheen, sillä arvo on tyyppiä string (merkkijono)

4. Perustyypit

C#-kielen perustyyppejä:

4.1. Lukuarvotyypit

Lukuarvotyyppejä on kokonaisluku- ja liukulukutyyppisiä. Kokonaisluvuilla (integer) ei ole desimaaliosaa, kun taas liukuluvuilla (floating point number) on. Yleensä voidaan käyttää kokonaisluvuille tyyppiä int ja liukuluvuille double, mutta tässä taulukko muistakin kokonaislukutyypeistä:

(Linkit vievät MSDN-dokumentteihin.)

TyyppinimiPienin mahdollinen arvoSuurin mahdollinen arvoSelitys
byte0255Tavu
short-3276832767Etumerkillinen lyhyt kokonaisluku
ushort065535Etumerkitön lyhyt kokonaisluku
int-2147483648 (noin -2.1 miljardia)2147483647Etumerkillinen kokonaisluku
uint04294967296 (noin 4.3 miljardia)Etumerkitön kokonaisluku
long-9.22 * 1018 (noin -9 triljoonaa)9.22 * 1018Etumerkillinen pitkä kokonaisluku
ulong01.84 * 1019 (noin 20 triljoonaa)Etumerkitön pitkä kokonaisluku

Liukuluvuille oleellista on tarkkuus, ei niinkään lukualue. Double-tyyppinen muuttuja kykenee noin 15 desimaalin tarkkuuteen. Doublen lisäksi on myös vähemmän tarkka tyyppi float, jonka tarkkuus on noin 7 desimaalia. Float-tyyppisiä lukuja ei käsitellä tällä kurssilla.

4.2. Merkit ja merkkijonot

Muuttujiin voidaan tallentaa myös tekstiä. Teksti tallennetaan merkki kerrallaan, mistä nimitys merkkijono (string <- string of characters). Yksittäisiä merkkejä voidaan tallentaa char-tyyppisiin muuttujiin ja merkkijonoja string-tyyppisiin.

char c = 'a';
string jono = "abcdef";

Merkkijonoja voidaan myös yhdistellä + -operaattorilla:

string a = "merkki";
string b = "jono";
string c = a + b;   // "merkkijono"

4.3. Oliotyypit

Myös oliot ovat muuttujia. Lisätietoa Jypelin erilaisista olioista löytyy sivulta Oliot ja selitykset. Oliomuuttujan tyyppi on sen luokka.

5. Operaatiot

Muuttujan paikalla voidaan aina käyttää myös operaatiota, jossa muuttujia lasketaan yhteen, kerrotaan keskenään tai muuten manipuloidaan. Esimerkiksi

int c = a + b;

sijoittaa kokonaislukumuuttujaan c muuttujien a ja b yhteenlasketut arvot.

5.1. Aritmeettisia (laskennallisia) operaattoreita

OperaattoriEsimerkkiMerkitys
a = bSijoitus (b:n arvo sijoitetaan muuttujaan a)
+a + bYhteenlasku
-a - bVähennyslasku
*a * bKertolasku
/a / bJakolasku. Huom. nollalla ei saa jakaa||
%a % bJakolaskun jakojäännös

Lisäksi esim. sijoitus a = a + b voidaan kirjoittaa lyhyempään muotoon a += b. Sanallisesti ilmaistuna tämä tarkoittaa, että "muuttujan a arvoon lisätään b:n arvo". Sama käytäntö pätee myös muille operaattoreille.

5.2. Vertailuoperaattorit

Kahden muuttujan vertailua voidaan käyttää esimerkiksi if-lauseessa. Muuttujien paikalla voidaan edelleen käyttää operaatiolausekkeita. Tässä yleisimmät vertailuoperaattorit:

OperaattoriEsimerkkiMerkitys
a == bYhtäsuuruus
=||a != bErisuuruus
<a < bPienempi kuin
>a > bSuurempi kuin
<a <= bPienempi tai yhtäsuuri kuin
>a >= bSuurempi tai yhtäsuuri kuin

6. Tyyppimuunnokset

Joskus voi tulla tarve muuttaa muuttuja tyypistä toiseen. Esimerkiksi kokonaisluvun voisi kuvitella olevan muunnettavissa helposti liukuluvuksi lisäämällä siihen nolladesimaalit perään. Tämä onnistuu niin sanotulla tyyppimuunnoksella, joka tehdään kirjoittamalla kohdetyyppi suluissa muunnettavan muuttujan eteen:

int kokonaisluku = 7;
double liukuluku = (double)kokonaisluku;

Jypeli tarjoaa myös monille tyypeille omat muunnosfunktionsa:

int kokonaisluku = 7;
double liukuluku = kokonaisluku.ToDouble();
String merkkijono = kokonaisluku.ToString();

Olioille on olemassa myös oma muunnoksensa varatulla sanalla as. Muunnos on turvallinen, sillä jos se ei onnistu, arvoksi asetetaan yksinkertaisesti null.

PhysicsObject fysiikkaolio = new PhysicsObject( "kissa", 2, 4 );
GameObject peliolio = fysiikkaolio as GameObject;

Lisätietoa: tämä voidaan kirjoittaa myös käyttäen is-operaattoria ja perinteistä tyyppimuunnosta käyttäen muodossa

PhysicsObject fysiikkaolio = new PhysicsObject( "kissa", 2, 4 );
GameObject peliolio = null;

if ( fysiikkaolio is GameObject )
{
   peliolio = (GameObject)fysiikkaolio;
}

Is tarkistaa, onko olio haluttua tyyppiä.