Lokální proměnná

V programování je lokální proměnná označení pro proměnnou, jejíž oblast platnosti (anglicky scope) je omezena na určitou proceduru, funkci nebo blok. Reference na proměnnou deklarovanou ve funkci nebo bloku programu přepíše viditelnost proměnné se stejným jménem deklarovanou ve vyšší oblasti platnosti. V programovacích jazycích využívajících pouze dvě úrovně viditelnosti je lokální proměnná opakem globální proměnné. Na druhou stranu mnoho jazyků odvozených z jazyka ALGOL povoluje libovolný počet vnořených úrovní viditelnosti. Lokální proměnné jsou základem procedurálního programování a modulárního programování obecně: proměnné s lokální oblastí platnosti jsou používány pro předejití problémů s vedlejšími účinky, které mohou nastat s použitím globálních proměnných.

Ve většině programovacích jazyků jsou lokální proměnné uloženy na zásobníku volání. To znamená, že při každém volání rekurze se lokální proměnné každé instance podprogramu uloží odděleně do adresové paměti. Proto mohou být proměnné v oblasti této instance deklarované, přepisované a čtené bez rizika ovlivnění funkce mimo blok, ve kterém byli deklarovány.

Oblast platnosti

Lokální proměnné mohou mít lexikální nebo dynamickou oblast platnosti. Většina ostatních jazyků používá lexikální (statickou) oblast platnosti lokálních proměnných. K jazykům, které podporují dynamické oblasti platnosti patří Logo, Emacs lisp a interprety příkazů bash, dash a „lokální“ deklarace v MirBSD Korn shellu (mksh). Některé jazyky jako Perl nebo Common Lisp dovolují programátorovi při definici nebo redefinici proměnné vybírat mezi statickou a dynamickou oblastí platnosti.

Lexikální oblast platnosti

Pro lexikální oblast platnosti platí, že pokud je jméno proměnné vytvořené v konkrétním bloku programu, potom je proměnná viditelná v tomto bloku, ne však ve vyšších (obklopujících) blocích. Ve vnořených blocích je proměnná viditelná, pokud ve vnořeném bloku není vytvořena jiná proměnná se stejným jménem.

Dynamická oblast platnosti

Dynamická oblast platnosti znamená, že pokud je proměnná deklarována nebo vytvořena v určitém bloku, pak je její oblastí platnosti nejen tento blok, ale i všechny funkce z něho vyvolané (tranzitivně), kromě funkcí, ve kterých je jméno překryté jinou deklarací. Proměnná přestává existovat při opuštění bloku, v němž je deklarována.

Doba existence

Typická lokální proměnná vzniká se vstupem do bloku, ve kterém je deklarována nebo použita, přetrvává i po dobu provádění vnořených bloků nebo vyvolaných procedur a funkcí a zaniká při opuštění svého bloku. Jinou dobu existence mají statické lokální proměnné.

Statické lokální proměnné

Specifickým druhem lokální proměnné je statická lokální proměnná, která je dostupná v mnoha běžně používaných jazycích (včetně C/C++, Visual Basic a VB.NET) dovolujících uchovat hodnotu proměnné mezi jednotlivými voláními funkce, ve které je deklarovaná. V tomto případě mají i rekurzivní volání přístup k společné proměnné na jednom místě paměti.

Statické lokální proměnné deklarované v globálních funkcích mají stejnou životnost jako statické globální proměnné, protože zůstávají v paměti po celou dobu běhu programu. Toto chování je odlišné od jiných využití klíčového slova static, které má několik rozdílných významů v různých programovacích jazycích.

Lokální proměnné v jednotlivých programovacích jazycích

Perl

Perl podporuje dynamické i lexikální typy lokálních proměnných. Klíčové slovo local je použito pro definování lokální proměnné s dynamickou oblastí platnosti. Naproti tomu klíčové slovo my je použito pro lokální proměnnou s lexikální oblastí platnosti.

K pochopení funkce uvažujme následující kód

$a = 1;
sub f() {
  local $a;
  $a = 2;
  g();
}
sub g() {
  print "$a\n";
}
g();
f();
g();

výstupem bude:
1
2
1

Tento výsledek nastane proto, že globální proměnná $a je modifikovaná na novou dočasnou lokální proměnnou uvnitř funkce f(), ale po opuštění funkce je její hodnota obnovena na předchozí hodnotu před vstupem do funkce. Použití klíčového slova 'my' v tomto případě namísto 'local' by vypsalo třikrát po sobě 1, protože by se proměnná $a omezila na statickou oblast platnosti funkce f() a nebyla by viditelná ve funkci g().

Ruby

Programovací jazyk Ruby byl inspirován mimo jiné jazykem Perl, ale v jeho případě bylo značení zjednodušeno: jméno globální proměnné musí předcházet znakem $ (například $moje_promenna), zatímco lokální proměnná se zapisuje jednoduše bez $ (například moje_promenna). Za zmínku stojí, že Ruby poskytuje v základu podporu pouze pro lokální proměnné s lexikální oblastí platnosti, které odpovídá klíčovému slovu my v Perlu. Existují ale knihovny pro Ruby, které doplňují možnost využívat lokální proměnné s dynamickou oblastí platnosti.

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Local variable na anglické Wikipedii.

Související články


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Lokální_proměnná
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.