Значення (інформатика)Значення в програмуванні — елемент даних, який є одним з можливих членів типу даних[1]: воно може бути числом, символом або рядком символів. Значення може відповідати деякому стану величини (змінної або константи відповідного типу). Наприклад, У мовах з можливістю присвоювання значень змінним виникає необхідність розрізняти r-значення (r-value — зміст) і l-значення (l-value — місце розташування) змінної[1]. У декларативних мовах значення повинні бути посилально прозорими — вихідне значення не залежить від місця розташування в якому знаходиться вираз (або підвираз), необхідний для розрахунку значення. l-значення і r-значенняІдея l-значень і r-значень походить з мов програмування з операторами присвоювання, в яких для значень зліва (left) і праворуч (right) від оператора використовується різний режим обчислення. l-значення вказує на об'єкт, який зберігається за межами одного виразу, r-значення — це тимчасове значення, яке не зберігається за межами виразу, який його використовує[2]. Поняття l-значення і r-значення були введені в мові CPL. У багатьох мовах програмування, особливо в родині С-подібних, l-значення мають адреси зберігання, які програмно доступні виконуваній програмі (наприклад, використовуючи оператор адресації «&» в C/C++). Це означає що l-значення є змінною або розіменованим посиланнями на певні області пам'яті. Протилежністю l-значенню є r-значення, яке не має постійної адреси в пам'яті. Прикладами можуть бути окремі числа або вирази, значення яких обчислюється під час виконання програми і надається деякій змінній. У C++ всі змінні є l-значеннями, оскільки вони мають адреси в пам'яті, r-значення можуть бути l-значеннями або не-l-значеннями (безпосереднє значення, яке не має адреси у пам'яті). Для прикладу візьмемо вираз Незмінюване (константне) l-значення має адресу, але не може бути змінено. На відміну від нього, змінюване l-значення дозволяє не тільки отримувати значення, пов'язане з об'єктом, але і надавати йому інше значення. Спочатку термін l-значення позначав в мові програмування С об'єкт, якому можна надавати значення, звідси і назва, що вказує, що воно знаходить ліворуч (left) від оператора присвоювання, проте з тих пір, як в мову було додано зарезервоване слово Приклади операцій присвоювання з використанням 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-значення (яке обчислює деяке значення). Примітки
Література
|
Portal di Ensiklopedia Dunia