Uzavření (informatika)
V programovacích jazycích, uzavření abstrakce reprezentuje funkciplus lexikální prostředí (viz scoping statické elektřiny) ve kterém funkce byla vytvořena.Uzavření jsou typicky splnil s specialitou datová struktura to obsahuje ukazatel na operační znak plus reprezentaci funkčního lexikálního prostředí (tj. soubor dostupných proměnných a jejich hodnot) v době když uzavření bylo vytvořeno.
Uzavření typicky se objevit v jazycích, které dovolí funkcím být “prvotřídní” hodnoty -- - jinými slovy, takové jazyky dovolí funkcím být vypadal jako argumenty, se vrátil z hovorů funkce, skákat ke jménům proměnné, etc., úplně jako jednodušší typy takový jako řetězce a celá čísla.
Například, v ML, dodržování kodexu určí funkci f to vrátí jeho argumentu plus 1:
legrace f (x) = x + 1;Takový funkce může “snímací” jméno/cenit vázání od jeho přikládat prostředí, produkovat uzavření. Například, v kódovém fragmentu:
val x = 1; legrace f (y) = x + y;uzavření datová struktura reprezentovat f obsahuje ukazatel k přikládat prostředí, ve kterém x je svázán k 1. Proto, f vždy vrátí jeho argumentu plus 1, dokonce jestliže životní prostředí ve kterém to je aplikováno má různou hodnotu pro x. Proto, zvažovat fragment kódu:
nechal val x = 1; legrace f (y) = x + y; v nechaném val x = 2; v f (3) konec konceV tomto kódu, hovor f(3) se vyskytuje v prostředí (inner nechaný) kde x je svázán k 2. Nicméně, uzavření pro f byl postaven v prostředí (vnější nechaný) kde x je svázán k 1. Proto výsledek hovoru f(3) je 4, ne 5.
Uzavření mají mnoho použití:
- Návrháři knihoven softwaru mohou dovolit uživatelům přizpůsobit chování pomíjivými uzavřeními jako argumenty k důležitým funkcím. Například, funkce že sortss hodnoty mohou přijímat argument uzavření, který porovná hodnoty být tříděn shodovat se k uživatelsky definovanému kritériu.
- Protože uzavření zdrží ohodnocení -- - tj., oni “nedělají” něco until oni jsou voláni -- - oni mohou být používáni definovat struktury kontroly. Například, celý Smalltalk je standardní kontrolní struktury, včetně větví (jestliže/pak/jinde) a smyčky (zatímco a pro), jsou definované používající objekty jehož metody připustí uzavření. Uživatelé mohou snadno definovat jejich vlastní kontrolní struktury také.
- Rozmanité funkce mohou být produkoval kterého uzavřít přes stejné prostředí, umožnit jim komunikovat soukromě tím, že změní to prostředí.
Schéma bylo první programovací jazyk mít úplně obecné, lexically scoped uzavření. Doslova všechny funkční programovací jazyky, také jak Smalltalk- pocházející objektově orientované programování jazyky, podporovat nějakou formu uzavření. Některé prominentní jazyky, které podporují uzavření obsahují:
Některé objektově orientované jazyky umožní programátorovi používat objekty, aby simuloval některé rysy uzavření. Například:- Java dovolí programátorovi vymezit “anomymní classeses” uvnitř metody; anomymní třída může se odkazovat na jména v lexically přikládat třídy nebo nezměnitelná jména v lexically přikládat metodu.
- V C + +, programátoři mohou definovat třídy to přetížení () (funkční aplikační) operátor. Toto umožní příklady této třídy se chovat syntactically jako uzavření, ačkoli C + + poskytne žádnou přímou podporu pro zachycovat jména v přikládat prostředí funkce (programátor může simulovat některé aspekty zachycení prostředí tím, že používá členy dat ve třídě). Příklady takových tříd jsou objekty volané funkce, nebo občas functors (ačkoli druhý termín je matoucí, protože to má velmi odlišný smysl v jiných programovacích jazycích).
- funarg problém