Viz také: Volné proměnné a vázané proměnné

Obsah proměnné popisuje, kde v textu programu může být proměnná použita, zatímco rozsah (nebo doba života) popisuje, kdy v průběhu provádění programu má proměnná (smysluplnou) hodnotu. Rozsah proměnné je vlastně vlastností jména proměnné a rozsah je vlastností samotné proměnné. Ty by se neměly zaměňovat s kontextem (nazývaným také prostředí), který je vlastností programu a mění se podle místa ve zdrojovém kódu nebo provádění – viz rozsah: přehled. Dále se doba života objektu může shodovat s dobou života proměnné, ale v mnoha případech není s dobou života proměnné svázána.

Obsah názvu proměnné ovlivňuje její rozsah.

Obsah je důležitou součástí rozlišení názvu proměnné. Většina jazyků definuje pro každou proměnnou (stejně jako pro jakoukoli jinou pojmenovanou entitu) určitý rozsah, který se může v rámci daného programu lišit. Obor proměnné je část programového kódu, pro kterou má jméno proměnné význam a pro kterou se říká, že je proměnná „viditelná“. Vstupem do tohoto oboru obvykle začíná životnost proměnné (když vstupuje do kontextu) a výstupem z tohoto oboru obvykle končí její životnost (když odchází z kontextu). Například proměnná s „lexikálním oborem“ má význam pouze v rámci určité funkce/podprogramu nebo jemněji v rámci bloku výrazů/výroků (podle toho s oborem funkce nebo bloku); jedná se o statické rozlišení, které lze provést v době parsování nebo kompilace. Alternativně se proměnná s dynamickým oborem řeší za běhu, a to na základě globálního zásobníku vazeb, který závisí na konkrétním toku řízení. Proměnné přístupné pouze v rámci určitých funkcí se označují jako „lokální proměnné“. Na „globální proměnnou“ neboli proměnnou s neurčitým rozsahem lze odkazovat kdekoli v programu.

Rozsah je naproti tomu runtime (dynamický) aspekt proměnné. Každá vazba proměnné na hodnotu může mít za běhu svůj vlastní rozsah. Rozsah vazby je část doby provádění programu, během níž proměnná stále odkazuje na stejnou hodnotu nebo místo v paměti. Běžící program může do daného rozsahu vstupovat a vystupovat z něj mnohokrát, jako v případě uzávěru.

Pokud programovací jazyk neobsahuje funkci garbage collection, může proměnná, jejíž rozsah trvale přesahuje její rozsah, vést k úniku paměti, kdy paměť alokovaná pro proměnnou nemůže být nikdy uvolněna, protože proměnná, která by na ni odkazovala pro účely dealokalizace, již není přístupná. Může však být přípustné, aby vazba proměnné přesahovala její rozsah, jak se to děje v uzávěrech jazyka Lisp a statických lokálních proměnných jazyka C; když provádění přejde zpět do rozsahu proměnné, může být proměnná opět použita. O proměnné, jejíž obor začíná dříve než její rozsah, se říká, že je neinicializovaná a často má při přístupu k ní nedefinovanou, libovolnou hodnotu (viz divoký ukazatel), protože jí dosud nebyla explicitně přidělena konkrétní hodnota. Proměnná, jejíž rozsah končí před jejím oborem, se může stát visícím ukazatelem a je opět považována za neinicializovanou, protože její hodnota byla zničena. O proměnných popsaných předchozími dvěma případy lze říci, že jsou mimo rozsah nebo nevázané. V mnoha jazycích je chybou pokusit se použít hodnotu proměnné, když je mimo rozsah. V jiných jazycích to může vést k nepředvídatelným výsledkům. Takové proměnné však lze přiřadit novou hodnotu, čímž získá nový rozsah.

Pro úsporu místa lze paměťový prostor potřebný pro proměnnou alokovat pouze při prvním použití proměnné a uvolnit jej, když již není potřeba. Proměnná je potřebná pouze tehdy, když je v rozsahu, proto začátek životnosti každé proměnné při jejím vstupu do rozsahu může dát prostor nepoužívaným proměnným. Aby se zabránilo plýtvání takovým místem, překladače často varují programátory, pokud je proměnná deklarována, ale nepoužívá se.

Považuje se za dobrou programátorskou praxi, aby byl rozsah proměnných co nejužší, aby se různé části programu navzájem náhodně neovlivňovaly tím, že si budou navzájem modifikovat proměnné. Tím se také zabrání působení na dálku. Běžnými technikami jsou různé části programu, které používají různé jmenné prostory, nebo vytváření „soukromých“ proměnných pomocí dynamického rozsahu proměnných nebo lexikálního rozsahu proměnných.

Mnoho programovacích jazyků používá rezervovanou hodnotu (často pojmenovanou null nebo nil) pro označení neplatné nebo neinicializované proměnné.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.