Arvutiteaduse instituut
  1. Kursused
  2. 2018/19 kevad
  3. MOOC Programmeerimise alused II (LTAT.TK.001)
EN
Logi sisse

MOOC Programmeerimise alused II 2018/19 kevad

  • Kursuse info
  • 1. Kahemõõtmeline järjend
  • 2. Kahekordne tsükkel
  • 3. Andmestruktuurid
  • 4. Viitamine ja muteerimine

4.1 Viitamine 4.2 Muteerimine 4.3 Järjendi muteerimine 4.4 Funktsioon ja muteerimine 4.5 Kordamine 4.6 Silmaring: Objekt-orienteeritud programmeerimine

  • 5. Testimine ja silumine. Rekursioon
  • 6. Rekursioon II
  • Korraldajad
IV OSA sisukord

4.2 MUTEERIMINE

Me oleme oma kursuste jooksul ikka mingite muutujate väärtust muutnud. Juba termin muutuja isegi viitab muutumisele.

a = 5
a = 7
a += 4

Vaatame nüüd sedagi aspekti mõnevõrra sügavamalt.

a = 5
print(id(a))
a = 7
print(id(a))
a += 4
print(id(a))

annab tulemuseks (näiteks):

1464424784
1464424816
1464424880

Näeme, et iga omistamisega salvestati muutujasse a uus viit, mis siis viitab ka uuele objektile.

Mis juhtub, kui esimese omistamise järel antakse sama viit ka teisele muutujale?


Ka viitade vaatamine kinnitab, et a ja b lähevad pärast muutujale a uue väärtuse andmist kumbki oma teed.

a = 5
b = a
print(id(a))
print(id(b))
a = 7
print(id(a))
print(id(b))

Seega võib öelda, et muutuja a sai uue väärtuse - vana väärtus oli 5 ja uus on 7. Samas seda väärtust 5 mälu täisarvulise objektina ei muudetud. Nüüd on muutujasse a salvestatud uus viit, mis viitab täisarvulisel objektile väärtusega 7. Päris hävingule see väärtusega 5 objekt ka mõeldud pole, sest muutujas b olev viit jääb talle viitama.

Samamoodi juhtus ka a += 4 korral - uus väärtus uue viidaga.

Niisiis tegelikult pole täisarvu võimalik muuta. Kui seda tahaksime teha, siis tegelikult võetakse kohe uus objekt, mitte ei “parandata” vana. Sedalaadi andmetüüpe nimetatakse mittemuteeritavateks. Kui mingi objekt on loodud, siis selliseks ta jääb kogu oma eksisteerimise aja. Kui ta sellisena enam vajalik pole, siis visatakse ära. Eks nii kipub päriseluski tänapäeval mitmete asjadega olema.

Sõnu muteeritav, mittemuuteritav ja muteerima Õigekeelsussõnaraamatus pole. Samas on seal sõnad muteeruma ja mutatsioon. Seega kui me midagi muteerime, siis see asi muteerub ja toimub mutatsioon. Eks võiks ka tavakeelsemalt muutmisest, muutumisest ja muutusest rääkida, aga programmeerimises kasutatakse täpsuse eesmärgil siiski veidi võõrapärasemaid termineid nagu ka Aivar Annamaa programmeerimise õpikus.

Mittemuteeritavad (ingl immutable) on näiteks arvud, sõned, ennikud ja tõeväärtused. Muteeritavad (ingl mutable) on aga näiteks järjendid, hulgad ja sõnastikud. Muteeritavate objektide puhul on olemas võimalused nende muutmiseks - muteerimiseks. Näiteks saab elemente lisada, eemaldada ja välja vahetada.

Eelmise alapunkti lõpus jäi õhku selgitus, et miks arvude, sõnede ja ennikute puhul, vähemalt mingitel juhtudel, antakse viit samale objektile ka siis, kui muutujatpidi (b = a) omistamist pole. Nt

c = 6
d = 6

Nimelt võidakse mittemuteeritavate tüüpide korral nii korraldada, et ükskõik millisele muutujale vastav väärtus antakse, siis see võetakse samast kohast mälus, seega viit on sama. Kuna neid väärtusi nagunii muuta ei saa, siis pole muret sellega, et mingile väärtusele erinevate (ka omavahel seostamata) muutujate poolt viidatud on.


IV OSA sisukord
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo