Az érték a programozásban egy adatelem , amely egy adattípus egyik lehetséges tagja [1] , amely megfelelhet a megfelelő típusú változó vagy állandó valamely állapotának . Például egy egész típusú érték . 2
Azokon a nyelveken, amelyek képesek értékeket hozzárendelni a változókhoz, szükségessé válik egy változó r-értékeinek (r-érték - tartalom) és l-értékeinek (l-érték - helye) megkülönböztetése [ 2] .
A deklaratív nyelveken az értékeknek referenciálisan átláthatónak kell lenniük . Ez azt jelenti, hogy a kimeneti érték független az érték kiértékeléséhez szükséges kifejezés (vagy részkifejezés) helyétől.
Az értékek és rértékek ötlete a hozzárendelési operátorokkal rendelkező programozási nyelvekből származik, amelyekben az operátortól balra (balra) és jobbra (jobbra) lévő értékek egy eltérő értékelési mód. Az l-érték olyan objektumra mutat, amely egyetlen kifejezésen túl is fennmarad. Az r-érték egy ideiglenes érték, amely nem marad fenn az azt használó kifejezésen túl. [3]
Az l-érték és az r-érték fogalmát a CPL nyelvben vezették be . Az r-értékek, l-értékek és r/l-értékek kifejezéseiben szereplő fogalmak a következő paramétermódoknak felelnek meg : bemeneti paraméter (értéke van), kimeneti paraméter (hozzárendelhető) és bemeneti/kimeneti paraméter ( értéke van, és hozzárendelhető), azonban a nyelvek között technikai különbségek vannak a kontextustól függően.
Sok nyelven, különösen a C-szerű nyelveken, az l-értékeknek van egy tárcíme , amely programozottan elérhető a végrehajtó program számára (például a C/C++ "&" címző operátorával). Ez azt jelenti, hogy az l-értékek változók vagy meghatározott memóriaterületekre hivatkozó hivatkozások . Az R-értékek lehetnek l-értékek (lásd alább) vagy nem-l-értékek (az l-értékektől való megkülönböztetés céljából bevezetett kifejezés). Vegyünk például egy kifejezést 4 + 9a C nyelvben. Futás közben a program előállítja a 13-as értéket, de mivel a program nem határozza meg, hogy hol található ez a 13, a kifejezés nem l-érték. Másrészt, ha egy C program deklarál egy x változót, amelyhez 13 értéke van hozzárendelve, akkor a kifejezés xértéke 13, és l-értékű.
Eleinte az l-érték kifejezés a C nyelvben olyasmit jelöl, amihez valami hozzárendelhető (innen a név, ami azt jelzi, hogy a hozzárendelési operátor bal (bal) oldalán van), de mivel a fenntartott szó const(konstans ) hozzáadva a nyelvhez ), a kifejezés most úgy hangzik, mint "módosítható l-érték". A C++11 nyelvben van egy speciális szemantikai karakterjel &&a "kifejezés címét csak a fordító használja"; &vagyis a címet a programvégrehajtás során az operátor nem tudja kiszámítani . (lásd a mozgásszemantikát ).
Ezt a típusú hivatkozást minden r-érték használhatja, beleértve az l-értékeket és a nem-l-értékeket is. Egyes processzorok olyan utasításokkal rendelkeznek, amelyek azonnali értéket vesznek fel . A közvetlen érték egy olyan utasítás részeként kerül tárolásra, amely általában arra használja, hogy egy regiszterbe helyezze, vagy hozzáadja vagy kivonja belőle. Az utasítás további részei a műveleti kód és a vevő (regiszter). Ez utóbbi lehet kimondatlan. A nem azonnali érték lehet egy regiszterben vagy a memóriában, és az utasításnak tartalmaznia kell az érték közvetlen vagy közvetett címét, például annak a regiszternek az indexét, amelyből az értéket veszik.
Az L-érték kifejezésként egy objektumra mutat[ adja meg ] . A nem módosítható (konstans) l-értéknek van címe, de nem módosítható. Ezzel szemben a változtatható l-érték lehetővé teszi, hogy ne csak lekérjen egy objektumot, hanem más értéket is hozzárendeljen hozzá. Az R-érték bármilyen kifejezés (beleértve az l-értékeket is), a nem-l-érték pedig minden olyan kifejezés, amely nem l-érték. A nem l értékre példa az azonnali érték, amelynek nincs címe.
Az érték a rendelkezésre álló adattípusok bármelyike lehet: lehet karakterlánc, számjegy vagy egyetlen karakter.
Sok processzor támogatja az azonnali értékek többféle méretét, például 8 vagy 16 bitet, mindegyikhez különböző utasításkódot használva. Ha a programozó olyan értéket szúr be, amely nem illeszkedik, akkor az assembler "Out of range " hibát ad ki . A legtöbb assembler lehetővé teszi az azonnali értékeket ASCII , decimális , hexadecimális , oktális vagy bináris formátumban. Ez azt jelenti, hogy az ASCII karakter megegyezik a vagy értékkel . A szöveges karakterláncok bájtsorrendje a processzor típusától, az összeszerelő verziójától vagy a számítógép architektúrájától függően változhat. 'A'650x41