Értékadás hatására a változók egy
objektumra mutatnak. A Theta-ban az értékadás alapvető tényező. Minden
más tényező,
beleértve a hívást is, függ az értékadás szabályaitól.
A változó deklarált típusán, és a rutin fejlécén alapulva, a fordító ki tudja számítani bármilyen kifejezés típusát. Erre a típusra mint nyilvánvaló típus hivatkozunk, ami szembe helyezkedik az objektum aktuális típusával, amit a futás közben kiértékelt kifejezés eredményez. Az aktuális típus mindig altípusa a nyilvánvaló (statikus) típusnak.
Ez az értékadás
akkor és csak akkor megengedett, ha a statikus típusa az e kifejezésnek altípusa a változó típusának. Ily módon, a fordító garantálja, hogy bármilyen inicializált v változóra, hogy v-nek értékül adott objektum típusa altípusa a v típusának.
Az értékadás legegyszerűbb formája, egy egyszerű kifejezés értékét rendeljük egy egyszerű változóhoz. Hozzátesszük, hogy két fajtája van az összetett értékadásnak, egy egyik amikor kifejezések halmazát rendeljük változók halmazához, a másik amikor visszatérési értékek halmazát rendeljük (egy egyszerű hívástól) változók egy halmazához (a Theta támogatja a többváltozós visszatérési értékkel rendelkező rutinokat).
Az értékadó utasítás a következő két forma valamelyikével rendelkezik:
<statement> -> <lhs> ":=" <expr> ["," <expr>]*
| <lhs> ":=" <invoc>
ahol
<lhs> -> <var> ["," <var> ]*
<var> -> <idn> | <primary> "." <idn>
A var változó lehet egy azonosító, egy mező szelektor ("rekord"-é vagy "struct"-é), vagy egy példányváltozó. A 'primary "." idn" forma arra használható, hogy egy "record" vagy "struct" mezőjét, vagy egy objektum példányváltozóját kiválasszuk. (A példányváltozók csak az objektum osztályt) A "primary" egy korlátozott lehetősége az értékadásnak.
Ha a jobb oldal egy vagy több kifejezést tartalmaz, akkor a jobb oldalon található kifejezések száma meg kell egyezzen a bal oldalon található változók számával, és a típusaik a megfelelő változók típusainak altípusának kell lenniük. A "primary"-k és a kifejezések tetszés szerint lesznek kiértékelve, ha nem váltódik ki kivétel, az első kifejezés értéke hozzárendelődik az első változóhoz, és így tovább. A változók eredménye egy olyan objektumra mutat, amelyet a kifejezés kiszámításával kap meg. A következő példa két változó felcserélését valósítja meg,
mivel "x" arra az objektumra mutat, amire "y" mutatott, és "y" arra az objektumra mutat, amelyre azelőtt az "x" mutatott.
Ha a jobboldal egy függvényhívást tartalmaz, akkor a visszatérési értékek száma és típusa meg kell egyezzen, illetve altípusa kell legyen a megfelelő baloldalon található változónak. A jobb oldal "primary" (szelektorral) történő megadása esetén a jobboldal, és a hívások kiszámítási sorrendje tetszőleges, és ha nem váltódik ki kivétel, akkor a hívás visszatérési értékei hozzárendelődnek a megfelelő változókhoz. Egy példa ennek a formának a használatára:
Nem megengedett meghívni egy többértékű rutint, ha egyszerű visszatérési értékre számítunk.Tehát ilyen rutint csak egy összetett értékadásban vagy egy függvényhívási kifejezésben szabad meghívni (ahol a visszatérési értékeket eldobjuk).
Az értékadás arra példa, hogyan használjuk már deklarált változókat a kifejezések jobb oldalán. Az értékadásokat új változók deklarációjával is kombinálni lehet, így az új változót egy kifejezésben deklaráljuk és adunk neki kezdőértéket. Ebben az esetben a jobb oldal a következő alakkal rendelkezik:
<lhs> -> <decl> ["," <decl>]*
A deklarációnál használhatunk kifejezéseket, vagy függvényhívást is a baloldalon. Ha többértékű kifejezéseket használunk a jobboldalon, akkor ezek tetszőleges sorrendben lesznek kiértékelve. Ha nem történik kivétel a jobboldal kiszámításakor, akkor az új változók létrejönnek, és a visszatérési (eredmény) objektumokra fognak mutatni. A kifejezés megengedett, ha a jobboldal kiszámításával kapott eredmény objektumok száma megegyezik a deklarált változók számával, és az visszatérések típusa altípusa a megfelelő változó típusának.
Megjegyezzük, hogy a kifejezés a vagy már deklarált változókara van hatással, vagy az új deklarált változók. A két forma soha nem keveredhet. Megjegyezzük, hogy az új deklarált változók nem használhatjuk egy olyan inicializáló értékadás jobboldalán, amely neki ad értéket.
A következő inicializáló értékadások megengedettek:
ahol "foo", "intdiv", és "search" a következő típussal rendelkezik: