En værdi i programmering er et dataelement , som er et af de mulige medlemmer af en datatype [1] , som kan svare til en eller anden tilstand af en variabel eller konstant af den tilsvarende type. For eksempel 2 er en værdi af heltalstypen .
På sprog med evnen til at tildele værdier til variabler, bliver det nødvendigt at skelne mellem r-værdier (r-værdi - indhold) og l-værdier (l-værdi - placering) af en variabel [ 2] .
På deklarative sprog skal værdier være referentielt gennemsigtige . Dette betyder, at outputværdien er uafhængig af placeringen af udtrykket (eller underudtrykket), der kræves for at evaluere værdien.
Ideen om værdier og r-værdier kommer fra programmeringssprog med tildelingsoperatorer, hvor værdier til venstre (venstre) og højre (højre) for operatøren bruger en anden evalueringstilstand. l-værdien peger på et objekt, der fortsætter ud over et enkelt udtryk. En r-værdi er en midlertidig værdi, der ikke består ud over det udtryk, der bruger den. [3]
Begreberne l-værdi og r-værdi blev introduceret i CPL -sproget . Begreberne i udtryk for r-værdier, l-værdier og r/l-værdier svarer til følgende parametertilstande : inputparameter (har en værdi), outputparameter (kan tildeles) og input/outputparameter ( har en værdi og kan tildeles), men der er tekniske forskelle mellem sprog afhængigt af konteksten.
På mange sprog, især C-lignende, har l-værdier en lageradresse , der er programmatisk tilgængelig for det eksekverende program (for eksempel ved at bruge "&"-adresseringsoperatoren i C/C++). Det betyder, at l-værdier er variable eller dereferencer til specifikke hukommelsesområder. R-værdier kan være l-værdier (se nedenfor) eller ikke-l-værdier (et udtryk introduceret for at skelne det fra l-værdier). Tag for eksempel et udtryk 4 + 9i C-sproget. Ved kørsel genererer programmet værdien 13, men da programmet ikke angiver, hvor disse 13 er indeholdt, er udtrykket ikke en l-værdi. På den anden side, hvis et C-program erklærer en variabel x, der er tildelt værdien 13, så har udtrykket xværdien 13 og er en l-værdi.
Først betegnede udtrykket l-værdi i C-sproget noget, som noget kan tildeles (deraf navnet, hvilket indikerer, at det er til venstre (til venstre) af tildelingsoperatoren), men da det reserverede ord const(konstant ) har blevet tilføjet til sproget ), lyder udtrykket nu som "modificerbar l-værdi". I C++11 er der en speciel semantisk glyf &&for "brug kun adressen på et udtryk af compileren"; det vil sige, at adressen ikke kan beregnes af operatøren &under programafviklingen. (se flyttesemantik ).
Denne type reference kan bruges af alle r-værdier, inklusive både l-værdier og ikke-l-værdier. Nogle processorer har instruktioner, der har en umiddelbar værdi . Den umiddelbare værdi gemmes som en del af en instruktion, der typisk bruger den til at placere den i et register eller tilføje eller trække fra den. De øvrige dele af instruktionen er opkoden og modtageren (registret). Det sidste kan være uudtalt. En ikke-umiddelbar værdi kan være i et register eller i hukommelsen, og en instruktion skal indeholde en direkte eller indirekte adresse på værdien, såsom indekset for det register, hvorfra værdien er taget.
L-værdi som udtryk peger på et objekt[ angiv ] . En ikke-modificerbar (konstant) l-værdi har en adresse, men kan ikke ændres. I modsætning hertil giver en foranderlig l-værdi dig mulighed for ikke kun at hente et objekt, men også tildele en anden værdi til det. En R-værdi er ethvert udtryk (inklusive l-værdier), og en ikke-l-værdi er ethvert udtryk, der ikke er en l-værdi. Et eksempel på en ikke-l-værdi er en umiddelbar værdi, der ikke har nogen adresse.
Værdien kan være af enhver af de tilgængelige datatyper : den kan være en streng, et ciffer eller et enkelt tegn.
Mange processorer understøtter flere størrelser af umiddelbare værdier, såsom 8 eller 16 bit, ved hjælp af forskellige instruktionskoder for hver. Hvis programmøren indsætter en værdi, der ikke passer, udsender assembleren fejlen "Udenfor rækkevidde " . De fleste assemblere tillader umiddelbare værdier i ASCII- , decimal- , hexadecimal- , oktal- eller binære formater. Det betyder, at ASCII-tegnet er identisk med værdien eller . Byterækkefølgen i tekststrenge kan variere afhængigt af typen af processor, assemblerversion eller computerarkitektur. 'A'650x41