Ero sivun ”Muuttuja (ohjelmointi)” versioiden välillä

135 merkkiä lisätty ,  14 vuotta sitten
p
w
p (w)
'''Muuttuja''' ''(variable)'' tarkoittaa imperatiivisessa [[ohjelmointi|ohjelmoinnissa]] nimettyä eli symbolista tietovarastoa, josta tietoa voidaan hakea ja johon tieta voidaan kirjoittaa, mikäli muuttuja ei ole ns. [[vakio]] (tällöin on tietenkin harhaanjohtavaa puhua muuttujasta). Muuttujia käytetään yleisesti [[ohjelmointiohjelmointikieli]]kielissässä tiedon varastointipaikkana.
 
== Perusteet ==
=== Muuttujien käyttö ===
 
Muuttujia käsitellään ohjelmointikielissä operaattoreiden avulla. Esimerkiksi yhteenlaskussa käytetään yleensä "+" -operaattoria kahden muuttujan välissä merkitsemään yhteenlaskua. Operaattori voi sijaita myös muualla suhteessa muuttujaan. Esimerkiksi [[Lisp]] -ohjelmointikielessä:
 
(+ x y )
* sisältää vapaasti mitä tahansa tietoa
 
Jos muuttujan viittaama tyyppi on etukäteen määritelty, kuten useimmissa [[ohjelmointikielen kääntäjä|käännetyissä]] ohjelmointikielissä tehdään, se ei saa viitata muun kaltaiseen tietoon. Esimerkiksi muuttuja, joka viittaa kokonaislukuarvoon määritellään [[C (ohjelmointikieli)]] -kielessä seuraavasti:
 
int x;
=== Osoittimet ===
 
Erityisen hyödyllisiä muuttujia ovat muistiavaruuden osoitteet, koska ilman niitä ei moderneja tietokoneohjelmia voitaisi rakentaa. Muuttujaa, joka sisältää muistiavaruuden osoitteen sanoitaan osoittimeksi (pointer). Osoittimen etuna on, että se tarvitsee itse vähän tilaa (esim. 32-bittisissä tietokoneissa 32-bittiä), mutta sen osoittama tietomäärä voi olla mielivaltaisen suuri. Osoittimen yhteydessä on yleensä hyödyllistä määritellä myös sen osoittaman tiedon tyyppi. Esimerkiksi [[C]] -kielessä määritellään osoitin merkkijonoon seuraavasti:
 
char *teksti;
 
Tekstin pituus voi olla mitä tahansa, mutta tietoa välitettäessä tarvitsee välittää vain osoittimen arvo. Osoittimiin liittyy myös vakavien [[ohjelmointivirhe|ohjelmointivirheiden]] vaara, koska osoittimen arvon uudelleenasettaminen voi johtaa vakaviin virhetilanteisiin. Tästä syystä useissa uudemmissa ohjelmointikielissä ohjelmoija ei pääse itse asettamaan osoittimien arvoja, vaan [[ohjelmointikielen kääntäjä|kääntäjä]] / [[ohjelmointikielen tulkki|tulkki]] suorittaa suurempien tietoalkioiden ja olioiden käsittelyn osoittimilla ohjelmoijan "tietämättä".
 
=== Vakiomuuttujat ===
 
Jos muuttujan tietoa ei saa muuttaa, voidaan se määritellä ns. vakiomuuttujaksi. Muuttuja voi olla vakiomuuttuja myös, jos se sijaitsee muistialueella, johon ei voida kirjoittaa (ns. [[ROM -muisti]])
 
== Muistinvaraus ==
Muuttujien varaaminen tietokoneen muistista tapahtuu yleensä jollain seuraavista tavoista:
 
* muuttuja sijaitsee [[Rekisteri (tietokonetekniikka)|rekisterissä]]ssä
* muuttuja sijaitsee tietokoneen [[pino]]ssa
* muuttuja varataan tietokoneen [[keskusmuisti]]in
Suurin osa muuttujista luodaan ja talletetaan tietokoneen keskusmuistiin. Tällöin muuttuja säilyy tietokoneen muistissa niin kauan kuin virta katkaistaan tai sen päälle kirjoitetaan uusi arvo. Mikäli muuttuja talletetaan pysyväismuistiin, esim. [[kiintolevy]]lle tai [[flash-muisti]]in, muuttujan arvo säilyy myös virran katkaisemisen jälkeen.
 
Rekisterihin ja pinoon muuttujalle varataan muistia yleensä vain silloin, jos muuttujaa käsitellään vain lyhytaikaisesti ja muuttujan tulosta ei tarvitse säilyttää kuin hetken aikaa. Tavallisesti mm. laskujen välitulokset talletetaan rekistereihin. Esimerkiksi [[Intel]]in prosessoreiden [[x86]] -arkkitehtuurissa yhteenlasku voitaisiin suorittaa rekistereillä seuraavasti:
 
mov ax, 10
add ax, bx ; ax sisältää nyt summan 10+29
Funktiokutsujen parametrit talletetaan yleensä tietokoneen pinoon[[pino]]on, koska niitä ei tarvitse säilyttää kuin sen aikaa kun funktiokutsu on voimassa. Koska pino on käytettävissä useimmissa tietokone- tai mikroprosessoriarkkitehtuureissa, se on kätevä paikka väliaikaisen tiedon tallettamiseen.
 
[[Luokka:Ohjelmointi]]
2 588

muokkausta