Значення в програмуванні - елемент даних, який є одним з можливих членів типу даних: воно може бути числом, символом або рядком символів. Значення може відповідати деякому стану (змінної або константи відповідного типу). Наприклад, 2
- значення цілочисельного типу.
У мовах з можливістю присвоювання значень змінним виникає необхідність розрізняти r-значення (r-value - зміст) і l-значення (l-value - місце розташування) змінної.
У декларативних мовах значення повинні бути посилально прозорими - вихідне значення не залежить від місця розташування в якому знаходиться вираз (або підвираз), необхідний для розрахунку значення.
l-значення і r-значення
Ідея l-значень і r-значень походить з мов програмування з операторами присвоювання, в яких для значень зліва (left) і праворуч (right) від оператора використовується різний режим обчислення. l-значення вказує на об'єкт, який зберігається за межами одного виразу, r-значення - це тимчасове значення, яке не зберігається за межами виразу, який його використовує. Поняття l-значення і r-значення були введені в мові CPL.
У багатьох мовах програмування, особливо в родині С-подібних, l-значення мають адреси зберігання, які програмно доступні виконуваній програмі (наприклад, використовуючи оператор адресації «&» в C/C++). Це означає що l-значення є змінною або розіменованим посиланнями на певні області пам'яті.
Протилежністю l-значенню є r-значення, яке не має постійної адреси в пам'яті. Прикладами можуть бути окремі числа або вирази, значення яких обчислюється під час виконання програми і надається деякій змінній.
У всі змінні є l-значеннями, оскільки вони мають адреси в пам'яті, r-значення можуть бути l-значеннями або не-l-значеннями (безпосереднє значення, яке не має адреси у пам'яті). Для прикладу візьмемо вираз 4 + 9
у мові програмування С++. Під час виконання програма генерує значення 13, але оскільки в програмі не вказано, де міститься результат опрацювання, вираз є не l-значенням. З іншого боку, якщо в С-програмі оголошується змінна x, якій присвоюється значення 13, то виразx
має значення 13 і є l-значенням.
Незмінюване (константне) l-значення має адресу, але не може бути змінено. На відміну від нього, змінюване l-значення дозволяє не тільки отримувати значення, пов'язане з об'єктом, але і надавати йому інше значення.
Спочатку термін l-значення позначав в мові програмування С об'єкт, якому можна надавати значення, звідси і назва, що вказує, що воно знаходить ліворуч (left) від оператора присвоювання, проте з тих пір, як в мову було додано зарезервоване слово const
(константа ), термін тепер звучить як «змінюване l-значення». У C ++ 11 існує спеціальний семантичний гліф &&
, який вказує «використовувати адресу вирази тільки компілятору»; тобто адреса значення не може бути розрахована оператором &
під час виконання програми.
Приклади операцій присвоювання з використанням r-значень:
int a; // оголошуємо змінну a a = 5; // 5 обчислюється в 5, яке потім присвоюється змінній а a = 4 + 6; // 4 + 6 обчислюється в 10, яке потім присвоюється змінній а int b; // оголошуємо змінну b b = a; // a обчислюється в 10 (з попередніх операцій), яке потім присвоюється змінній b b = b; // b обчислюється в 10, яке потім присвоюється змінній b (нічого не відбувається) b = b + 2; // b + 2 обчислюється в 12, яке потім присвоюється змінній b
В останній операцію присвоювання ( b = b + 2; ) змінна b використовується в двох різних контекстах - ліворуч b використовується як l-значення (змінна з адресою в пам'яті), праворуч b використовується як r-значення і обчислює окреме значення (в даному випадку 12). При виконанні цієї операції, компілятор обчислить наступне:
b = 10 + 2;
Обчислене значення буде надано змінній b.
В лівій стороні операції присвоювання завжди має перебувати l-значення (яке має свою адресу в пам'яті), а в правій стороні операції присвоювання - r-значення (яке обчислює деяке значення).
Примітки
Література
- John C. Mitchell. Foundations for Programming Languages. — The MIT Press, 1996. — ISBN 0-262-13321-0.
- Christopher Strachey. Fundamental Concepts in Programming Languages. — 2000. — Т. 13. — С. 11—49. — doi:10.1023/A:1010000313106.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Znachennya v programuvanni element danih yakij ye odnim z mozhlivih chleniv tipu danih vono mozhe buti chislom simvolom abo ryadkom simvoliv Znachennya mozhe vidpovidati deyakomu stanu zminnoyi abo konstanti vidpovidnogo tipu Napriklad 2 znachennya cilochiselnogo tipu U movah z mozhlivistyu prisvoyuvannya znachen zminnim vinikaye neobhidnist rozriznyati r znachennya r value zmist i l znachennya l value misce roztashuvannya zminnoyi U deklarativnih movah znachennya povinni buti posilalno prozorimi vihidne znachennya ne zalezhit vid miscya roztashuvannya v yakomu znahoditsya viraz abo pidviraz neobhidnij dlya rozrahunku znachennya l znachennya i r znachennyaIdeya l znachen i r znachen pohodit z mov programuvannya z operatorami prisvoyuvannya v yakih dlya znachen zliva left i pravoruch right vid operatora vikoristovuyetsya riznij rezhim obchislennya l znachennya vkazuye na ob yekt yakij zberigayetsya za mezhami odnogo virazu r znachennya ce timchasove znachennya yake ne zberigayetsya za mezhami virazu yakij jogo vikoristovuye Ponyattya l znachennya i r znachennya buli vvedeni v movi CPL U bagatoh movah programuvannya osoblivo v rodini S podibnih l znachennya mayut adresi zberigannya yaki programno dostupni vikonuvanij programi napriklad vikoristovuyuchi operator adresaciyi amp v C C Ce oznachaye sho l znachennya ye zminnoyu abo rozimenovanim posilannyami na pevni oblasti pam yati Protilezhnistyu l znachennyu ye r znachennya yake ne maye postijnoyi adresi v pam yati Prikladami mozhut buti okremi chisla abo virazi znachennya yakih obchislyuyetsya pid chas vikonannya programi i nadayetsya deyakij zminnij U C vsi zminni ye l znachennyami oskilki voni mayut adresi v pam yati r znachennya mozhut buti l znachennyami abo ne l znachennyami bezposerednye znachennya yake ne maye adresi u pam yati Dlya prikladu vizmemo viraz 4 9u movi programuvannya S Pid chas vikonannya programa generuye znachennya 13 ale oskilki v programi ne vkazano de mistitsya rezultat opracyuvannya viraz ye ne l znachennyam Z inshogo boku yaksho v S programi ogoloshuyetsya zminna x yakij prisvoyuyetsya znachennya 13 to virazx maye znachennya 13 i ye l znachennyam Nezminyuvane konstantne l znachennya maye adresu ale ne mozhe buti zmineno Na vidminu vid nogo zminyuvane l znachennya dozvolyaye ne tilki otrimuvati znachennya pov yazane z ob yektom ale i nadavati jomu inshe znachennya Spochatku termin l znachennya poznachav v movi programuvannya S ob yekt yakomu mozhna nadavati znachennya zvidsi i nazva sho vkazuye sho vono znahodit livoruch left vid operatora prisvoyuvannya prote z tih pir yak v movu bulo dodano zarezervovane slovo const konstanta termin teper zvuchit yak zminyuvane l znachennya U C 11 isnuye specialnij semantichnij glif amp amp yakij vkazuye vikoristovuvati adresu virazi tilki kompilyatoru tobto adresa znachennya ne mozhe buti rozrahovana operatorom amp pid chas vikonannya programi Prikladi operacij prisvoyuvannya z vikoristannyam r znachen int a ogoloshuyemo zminnu a a 5 5 obchislyuyetsya v 5 yake potim prisvoyuyetsya zminnij a a 4 6 4 6 obchislyuyetsya v 10 yake potim prisvoyuyetsya zminnij a int b ogoloshuyemo zminnu b b a a obchislyuyetsya v 10 z poperednih operacij yake potim prisvoyuyetsya zminnij b b b b obchislyuyetsya v 10 yake potim prisvoyuyetsya zminnij b nichogo ne vidbuvayetsya b b 2 b 2 obchislyuyetsya v 12 yake potim prisvoyuyetsya zminnij b V ostannij operaciyu prisvoyuvannya b b 2 zminna b vikoristovuyetsya v dvoh riznih kontekstah livoruch b vikoristovuyetsya yak l znachennya zminna z adresoyu v pam yati pravoruch b vikoristovuyetsya yak r znachennya i obchislyuye okreme znachennya v danomu vipadku 12 Pri vikonanni ciyeyi operaciyi kompilyator obchislit nastupne b 10 2 Obchislene znachennya bude nadano zminnij b V livij storoni operaciyi prisvoyuvannya zavzhdi maye perebuvati l znachennya yake maye svoyu adresu v pam yati a v pravij storoni operaciyi prisvoyuvannya r znachennya yake obchislyuye deyake znachennya PrimitkiMitchell John C 1996 Foundations for programming languages Cambridge Mass MIT Press ISBN 0 262 13321 0 OCLC 33277643 Arhiv originalu za 9 zhovtnya 2018 Procitovano 2 lipnya 2021 LiteraturaJohn C Mitchell Foundations for Programming Languages The MIT Press 1996 ISBN 0 262 13321 0 Christopher Strachey Fundamental Concepts in Programming Languages 2000 T 13 S 11 49 doi 10 1023 A 1010000313106