Globální proměnná: Porovnání verzí

Přidáno 5 bajtů ,  před 9 měsíci
m
robot: přidáno {{Autoritní data}}; kosmetické úpravy
m (→‎top: Robot: napřímení šablony za použití AWB)
m (robot: přidáno {{Autoritní data}}; kosmetické úpravy)
Jsou obvykle považovány za nežádoucí. Globální proměnná může být potenciálně upravována odkudkoliv a kterákoliv část programu na ni může záviset (pokud není umístěna v [[Počítačová paměť|chráněné paměti]] anebo určená pouze pro čtení). Globální proměnná proto má neomezený potenciál pro vytváření vzájemné závislosti a přidáním vzájemné závislosti zvyšuje složitost. Globální proměnné ztěžují včlenění modulů, protože v [[software|softwaru]], který byl napsán někým jiným, mohla být použita stejná globální jména; tyto problémy lze omezit zavedením konvence pojmenování. Nicméně v některých případech může být použití globálních proměnných vhodné. Například můžou být využity k tomu, aby se zabránilo nutnosti neustále předávat často využívané proměnné v několika [[podprogram|funkcích]]. V praxi je to tak, že velké programy mohou vysloveně vyžadovat velký počet globálních proměnných. Velké programy obsahují mnoho [[parametr funkce|parametrů]], které jsou sdíleny mezi různými funkcemi. V tomto případě musíme dbát na to, abychom se ujistili, že sdílení globálních dat mezi funkcemi bude probíhat bez nehody.
 
Globální proměnné jsou značně používány pro předávání informací mezi částmi [[kód|kódu]]u, které nesdílí takzvaný vztah volajícího/volaného (caller/callee) jako souběžné podprocesy či signální manipulátory. V jazycích (včetně [[C (programovací jazyk)|jazyka C]]), kde každý soubor definuje implicitní jmenný prostor, se většina problémů s globálními proměnnými eliminuje oproti jazykům s globálním jmenným prostorem. Bez správného zamykání, jako např. [[vzájemné vyloučení]] (mutex), je kód používající globální proměnné nebezpečný s výjimkou proměnných jen pro čtení, které se nacházejí v chráněné paměti.
 
== Systémové proměnné ==
Systémové proměnné jsou prostředky poskytované některými [[operační systém|operačními systémy]]. Uvnitř OS [[Shell_Shell (programování)|shellu]] (ksh v [[unix|UnixuUnix]]u, [[bash]] v [[linux|LinuxuLinux]]u, COMMAND.COM v DOSu a CMD.EXE ve [[Microsoft_WindowsMicrosoft Windows|Windows]]). Například v [[UN*X|unixových systémech]] je možné z běžné proměnné vytvořit systémovou proměnnou pomocí klíčového slova „export“. Jiný kód než v shellu přistupuje k těmto proměnným pomocí API metod, jako například getev() a setenv().
 
Proměnné prostředí jsou lokální uvnitř určitého [[Proces_Proces (program)|procesu]], ve kterém jsou deklarovány. To znamená, že pokud spustíme dva terminály (dva různé procesy shellu) a změníme systémovou proměnnou, tak tato změna nebude vidět v ostatních terminálech. Ale když je vytvořen nový podřízený proces (potomek), pak zdědí všechny systémové proměnné a jejich hodnoty z nadřazeného procesu (rodiče).
 
== Global-only a global-by-default ==
 
== Podle jazyků ==
 
=== C a C++ ===
Programovací [[C_C (programovací_jazykprogramovací jazyk)|jazyk C]] nemá klíčové slovo global. Nicméně proměnné deklarované vně funkcí jsou v rámci souboru dostupné odkudkoli.
 
=== Java ===
Některé jazyky jako [[Java_Java (programovací_jazykprogramovací jazyk)|Java]], nemají globální proměnné. V Javě jsou všechny proměnné, které nejsou lokální, součástí konkrétní třídy. Proto jsou proměnné dostupné pouze v rámci třídy či její metody. Položky typu „static public“ jsou použity pro většinu účelů jako globální proměnné v jiných jazycích protože jejich chování je velmi podobné. Za globální proměnnou však může být považován [[singleton]], proto také tento [[návrhový vzor]] bývá kritizován.
 
=== PHP ===
=== Ostatní jazyky ===
* V jazyce [[Python]] a [[MATLAB]] může být globální proměnná deklarována kdekoliv pomocí klíčového slova.
* Globální proměnné v jazyce [[Ruby_Ruby (programovací_jazykprogramovací jazyk)|Ruby]] jsou vyznačené symbolem dolar (‚$‘).
 
== Reference ==
{{Překlad|en|Global variable|679535911}}
{{Autoritní data}}
 
[[Kategorie:Programování]]
1 379 877

editací