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

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
ztučnění + překlep + kat.
zřejmý {{Překlad|en|Global variable|679535911}}
Řádek 36: Řádek 36:
* V jazyce [[Python]] a [[MATLAB]] může být globální proměnná deklarována kdekoliv pomocí klíčového slova.
* 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_(programovací_jazyk)|Ruby]] jsou vyznačené symbolem ‚$‘.
* Globální proměnné v jazyce [[Ruby_(programovací_jazyk)|Ruby]] jsou vyznačené symbolem ‚$‘.

== Reference ==
{{Překlad|en|Global variable|679535911}}


[[Kategorie:Programování]]
[[Kategorie:Programování]]

Verze z 7. 9. 2015, 10:42

Globální proměnná je v počítačovém programování proměná s globálním rozsahem, tím je myšleno, že je viditelná (tedy přístupná) v celém programu pokud není skrytá-shadowed. Soubor všech globálních proměnných je známý jako globální prostředí nebo globální stav. V komplikovaných jazycích, globální proměnné jsou obecně statické proměnné, které jsou dostupné po celou dobu běhu programu. Ačkoliv v případě interpretovaných programovacích jazycích (včetně příkazové řádky), jsou globální proměnné alokovány dynamicky při jejich deklaraci, jelikož nejsou známy předem.

V některých jazycích jsou ve výchozím nastavení všechny proměnné globální , ale ve většině moderních jazyků mají proměnné omezenou působnost (například Lexikální omezení). Globální proměnné jsou pak deklarovány často ve vyšší úrovní programu. V jiných jazycích globální proměnné neexistují. Obecně to jsou modulární programovací jazyky, které prosazují modulární strukturu, nebo objektově orientované programovací jazyky, které dostupnost proměnných řeší strukturou tříd.

Použití

Interakce mechanismů s globálními proměnnými se nazývá globální prostředí. Paradigma globálního prostředí je opakem pro paradigma lokálního prostředí, kde mají všechny proměnné lokální, nesdílnou paměť (a proto veškeré interakce mezi nimi pracují pomocí přeposílání zpráv).

Jsou obvykle považovány za nepřesné. Globální proměná může být potencionálně upravována odkudkoliv a kterákoliv část programu na ni může záviset. (pokud není umístěna v 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 softwaru, kerý byl napsán někdým jiným, mohla být použíta stejná globální jména s vyjímkou jmen, které byly vloženy na základě dohody nebo konvece pojmenování. Nicméně v některách případech může být použití globálních promněných vhodné. Například můžou být využity k tomu, aby se zabránilo nutnosti neustále procházet často využívané proměnné v několika 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 obsahovají mnoho 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ódu, které nesdílí takzavaný vztah volajícího/volaného (caller/callee) jako souběžné podprocesy či signální manipulátory. V jazycích (včetně 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ř. 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ími systémy. Uvnitř OS shellu (ksh v Unixu, bash v Linuxu, COMMAND.COM v DOSu a CMD.EXE ve Windows). Například v 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().

Jsou lokální uvnitř procesu, ve kterém jsou deklarovány. To znamaná, ž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.

Když je vytvořen podřízený proces, zdědí všechny systémové proměnné a jejich hodnoty z nadřazeného procesu.

Global-only a global-by-default

Několik nestrukturovaných jazyků, jako například starší verze: BASIC, COBOL a FORTRAN (1956) poskytují pouze globální proměnné. Později Fortran II (1968) představil podprogramy s lokálními proměnnými a klíčové slovo COMMON pro přístup ke globálním proměnným. Proměnné jsou implicitně globální také v jazycích FORTH, Lua, Perl a ve většině shellů.

Podle jazyků

C a C++

Programovací 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, 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é.

PHP

PHP má klíčové slovo „global“ a množství neobvyklých způsobů použití. Proměnné, které jsou deklarovány vně funkce jsou dostupné z celého souboru. Nicméně nejsou dostupné uvnitř funkce, pokud nejsou deklarovány jako global.

Avšak některé předdefinované proměnné, známé jako superglobální jsou dostupné vždy. Všechna jsou pole. Obecně se používají tak, že super-globální proměnná obsahuje všechny proměnné definované mimo funkce. Změnou jejich elementů se změní obsah původních proměnných a přidáním elementu se vytvoří proměnná nová. Super-globální proměnné $_POST a $_GET jsou velmi využívány v programování webových aplikací.

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 jsou vyznačené symbolem ‚$‘.

Reference

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