Az imperatív programozás változója egy elnevezett vagy más módon címezhető memóriaterület, amelynek címe felhasználható az adatok elérésére . A változóban (vagyis egy adott memóriacímen) található adatokat e változó értékének nevezzük (röviden: a változó egy elnevezett memóriadarab, amelynek meghatározott típusa van).
Más programozási paradigmákban , például a funkcionális és logikai programozásban , a változó fogalma némileg eltérőnek bizonyul. Az ilyen nyelvekben a változót névként határozzák meg , amelyhez egy érték társítható , vagy akár az érték tárolási helyeként.
Egyes nyelveken a változó hatókörét és/vagy élettartamát a tárolási osztály adja meg .
Ha az adattípust fordítási időben határozzák meg , statikus gépelés történik , ha pedig futásidőben, akkor dinamikus gépelés . Utóbbi esetben néha azt mondják, hogy a változónak nincs típusa, bár a benne lévő adatok bizonyosan egy adott adattípushoz tartoznak , de ez már a program végrehajtása során tisztázódik.
A legtöbb esetben a statikus gépelés csökkenti a programvégrehajtás többletköltségét, mivel a dinamikus gépelés többráfordítást igényel az adattípusok kitalálásával és a vegyes típusú kifejezésekbe öntéssel. A statikus gépelés lehetővé teszi a típusok ellenőrzését a program összeállításának szakaszában. Ezenkívül megkönnyíti a hibák észlelését a fejlesztési szakaszban, amikor a javításuk olcsóbb.
Sok esetben azonban szükség van dinamikus gépelésre. Például a kompatibilitás fenntartásának szükségessége új adatábrázolási formátumra való áttéréskor (például a projekt régi része karakterláncként küldi el a dátumot az eljárásnak, az új objektumok pedig modernebb numerikus típust használnak).
Egy megnevezett memóriahely címe is meghatározható fordítási és futási időben egyaránt. A változók létrehozásuk időpontjában statikusak vagy dinamikusak lehetnek . Az előbbiek a program vagy szubrutin indításakor, az utóbbiak pedig a program végrehajtása során jönnek létre.
Dinamikus címzésre csak akkor van szükség, ha a tárolandó adatok mennyisége nem pontosan ismert előre. Az ilyen adatok speciális dinamikus struktúrákba kerülnek, amelyek típusát a feladat sajátosságainak és a kiválasztott programozási rendszer képességeinek megfelelően választják ki. Lehet verem , kupac , várólista stb. Még egy fájl is dinamikus struktúra abban az értelemben, ahogyan N. Wirth Pascal -ba helyezte el.
Hatókör szerint megkülönböztetünk helyi és globális változókat. Az előbbiek csak egy adott szubrutin számára érhetők el, az utóbbiak a teljes program számára. A moduláris és objektumprogramozás elterjedésével megosztott változók is megjelentek (az alprogram-hierarchia bizonyos szintjein elérhetők). A hatókört néha a tárolási osztály adja meg . A láthatóság korlátozható névterek bevezetésével .
A láthatósági korlátozást egyrészt arra találták ki, hogy ugyanazokat a változóneveket lehessen használni (ami ésszerű, ha a változók különböző alprogramokban hasonló funkciót töltenek be), másrészt a változók illegális használatával összefüggő hibák elleni védelem érdekében (ehhez azonban a programozónak kötelező birtokolni és a megfelelő logikát használni az adatok strukturálásakor).
A belső struktúra megléte szerint a változók lehetnek egyszerűek vagy összetettek (összetett).
Az összetett típusok legjellemzőbb példái a tömb (minden elem azonos típusú) és a rekord (az elemek különböző típusúak lehetnek).
Hangsúlyozandó egy ilyen felosztás relativitása: a különböző programok esetében ugyanaz a változó eltérő szerkezetű lehet.
Például a fordító egy valós típusú változóban 4 mezőt különböztet meg: a mantissza és a kitevő jeleit, plusz ezek értékeit, de a programját fordító programozó számára a valós változó egyetlen memóriacella, amely valós számot tárol.