Змінна (програмування)

Змінна в імперативний програмуванні - пойменована, або адресуемая іншим способом область пам'яті, адреса якої можна використовувати для здійснення доступу до даними. Дані, що знаходяться в змінної (тобто за даною адресою пам'яті), називаються значенням цієї змінної.

В інших парадигмах програмування, наприклад, в функціональної та логічної, поняття змінної виявляється дещо іншим. У таких мовах змінна визначається як ім'я, з яким може бути пов'язано значення, або навіть як місце (location) для зберігання значення.

Область видимості і / або час існування змінної в деяких мовах задається класом пам'яті.


1. Класифікація

1.1. Статична і динамічна типізація змінних

Якщо тип змінної визначається на етапі компіляції, має місце статична типізація, а якщо на етапі виконання програми - динамічна. В останньому випадку іноді говорять, що змінна не має типу, хоча дані, що містяться в ній, безумовно, відносяться до визначеного типом даних, але з'ясовується це вже під час виконання програми.

У більшості випадків статична типізація дозволяє зменшити витрати ресурсів при виконанні програми, оскільки для динамічної типізації потрібні витрати ресурсів на з'ясування типів даних їх приведення у виразах з змішаними типами. Статична типізація дозволяє перекладати перевірку типів на етапі компіляції програми. Це також спрощує виявлення помилок ще на етапі розробки, коли їх виправлення обходиться менш дорого. Тим не менш у багатьох випадках необхідне застосування динамічної типізації. Наприклад, необхідність підтримання сумісності при переході на новий формат представлення даних (наприклад, стара частина проекту посилає процедурі дату символьної рядком, а нові об'єкти використовують більш сучасний числовий тип).


1.2. Статичні і динамічні змінні

Адреса пойменованої комірки пам'яті також може визначатися як на етапі компіляції, так і під час виконання програми. За часом створення змінні бувають статичними і динамічними. Перші створюються в момент запуску програми або підпрограми, а другі створюються в процесі виконання програми.

Динамічна адресація потрібна тільки тоді, коли кількість вступників на зберігання даних заздалегідь точно не відомо. Такі дані розміщують у спеціальних динамічних структурах, тип якої вибирається у відповідності зі специфікою задачі і з можливостями обраної системи програмування. Це може бути стек, купа, чергу і т. п. Навіть файл, в тому сенсі, який заклав Н.Вірт в Паскаль, є динамічною структурою.


1.3. Локальні та глобальні змінні. Області видимості

За зоні видимості розрізняють локальні та глобальні змінні. Перші доступні тільки конкретної підпрограмі, другі - всій програмі. З поширенням модульного та об'єктного програмування, з'явилися ще й загальні змінні (доступні для певних рівнів ієрархії підпрограм). Область видимості іноді задається класом пам'яті. Обмеження видимості може проводитися шляхом введення просторів імен.

Обмеження зони видимості придумали як для можливості використовувати однакові імена змінних (що розумно, коли в різних підпрограмах змінні виконують схожу функцію), так і для захисту від помилок, пов'язаних з неправомірним використанням змінних (правда, для цього програміст повинен володіти і користуватися відповідною логікою при структуризації даних).


1.4. Прості і складні змінні

По наявності внутрішньої структури, змінні можуть бути простими або складними (складовими).

Прості змінні не мають внутрішньої структури, доступною для адресації. Остання застереження важлива тому, що для компілятора або процесора змінна може бути як завгодно складною, але конкретна система (мова) програмування приховує від програміста її внутрішню структуру, дозволяючи адресуватися тільки "в цілому".

Складні змінні програміст створює для зберігання даних, що мають внутрішню структуру. Відповідно, є можливість звернутися безпосередньо до будь-якого елементу. Найхарактернішими прикладами складних типів є масив (всі елементи однотипні) і запис (елементи можуть мати різний тип).

Слід підкреслити відносність такого поділу: для різних програм одна і та ж змінна може мати різну структуру. Наприклад, компілятор розрізняє в змінної речовинного типу 4 поля: знаки мантиси і порядку, плюс їх значення, але для програміста, компілюються свою програму, речова змінна - єдина комірка пам'яті, що зберігає дійсне число.


2. Угоди про іменуванні змінних