Reference (programování)

Reference je v informatice pojem používaný v programování, který označuje odkaz na proměnnou nebo instanci objektu. Reference je abstraktnější variantou ukazatele, která navenek neobsahuje žádnou informaci o uložení objektu v operační paměti.

Reference umožňuje v programu nepřímý přístup ke konkrétním datům, jako jsou proměnné nebo záznamy v paměti počítače nebo na jiném paměťovém zařízení (například pevný disk). Reference se odkazují k datům a přístup k těmto datům nazýváme dereferencí. Reference jsou odlišné od dat samotných. Typická reference odkazuje jen na fyzickou adresu, která dává pouze informaci, kde jsou data v paměti nebo na paměťovém zařízení uložena (a nic o jejím obsahu). Z tohoto důvodu se reference často označuje jako ukazatel (pointer) nebo adresa. Nicméně v reference může být rovněž uveden offset (rozdíl) mezi datovými adresami a nějaké pevné stanovené (většinou základní) adresy nebo indexu v poli.

Pojem reference nesmí být zaměňován s jinými hodnotami (primárními klíči nebo Identifikátory), které sice jednoznačně identifikují datovou položku, ale poskytují k ní přístup pouze v netriviální vyhledávací operaci v některé z tabulek v databázi.

Reference jsou široce používány v programování, zejména k efektivnímu přenosu velkého množství dat, nebo pro proměnlivá data jako jsou argumenty procedur, nebo sdílená data. Reference mohou zejména odkazovat na proměnné nebo záznam, který obsahuje odkazy na další data. Tato myšlenka je základem nepřímého adresování a mnoha propojených datových struktur, jako jsou například lineárními seznamy.

Výhody

Reference zvyšují flexibilitu, kde mohou být data uložena, jak jsou alokována a jak jsou předávána mezi jednotlivými částmi kódu. Dokud reference odkazují na tato data, umožňují k nim zároveň také přístup, a data samotná se tak nemusí nikam přesouvat. Reference také umožňují snadnější sdílení mezi rozdílnými částmi kódu.

Mechanismus referencí je základní vlastnost, kterou má většina moderních programovacích jazyků; dokonce i jazyky, které přímo nepodporují používání referencí je používají vnitřně nebo implicitně. Například předávání parametrů referencí může být prováděno buď explicitně nebo implicitně použitím referencí.

Příklady

Ukazatele jsou vzhledem k přímému vztahu se základním hardwarem efektivním a jedním z nejmocnějších typů odkazů vůbec. Nicméně, díky tomuto přímému vztahu, ukazatele vyžadují od programátora podrobné pochopení architektury dané paměti, protože ukazatele ukládají adresy místa uložení namísto přímé hodnoty. Tím může nevhodné používání ukazatelů snadno vést k nepředvídatelnému chování samotného programu. Inteligentní ukazatel (smart pointer) je zase neprůhledná datová struktura, které sice funguje jako ukazatel, ale lze k ní přistupovat pouze pomocí jednotlivých metod.

Deskriptor souboru nebo manipulátor souboru (file descriptor, file handle, nebo handle) jsou typy odkazu používané k abstraktnímu obsahu souboru. To obvykle představuje jednak samotný soubor (při žádosti zamknutí souboru), tak i specifické postavení v rámci obsahu souboru (při čtení souboru).

Při distribuovaném výpočtu (rozdělení na více menších, nenáročných úloh) může odkaz obsahovat více než adresu nebo identifikátor, ale může také zahrnovat specifikace síťových protokolů používané k vyhledávání a přístupu k odkazovaným objektům. Způsob, jakým je informace zakódována. Například Web WSDL (popis vzdálené webové služby), může být považována jako forma reference, protože obsahuje kompletní specifikace, jak najít a jak sem připojit na konkrétní webové služby. Reference na pohybující se distribuované objekty (peer-to-peer) je jiný příklad: je to kompletní specifikace, jak vytvořit malý proxy, software, který bude následně zapojen do peer-to-peer interakce, jejímž prostřednictvím lokální počítač může získat přístup k datům, která jsou replikována nebo existuje jen jako message stream.

Příklad volaní pomocí reference v E:

def modify(var p, &q) {
    p := 27 # předána hodnota - změněn pouze lokální parametr změněn
    q := 27 # předáván odkazem - proměnná používá ve volání je upravena
}

? var a := 1
# value: 1
? var b := 2
# value: 2
? modify(a,&b)
? a
# value: 1
? b
# value: 27

Příklad, který simuluje volaní referencí v jazyce C:

void Modify(int p, int * q, int * o)
{
    p = 27;  // předány hodnotou - změněn pouze lokální parametr
    *q = 27; // hodnotou nebo referencí, kontrola místa určeni
    *o = 27; // hodnotou nebo referencí, kontrola místa určeni
}
int main()
{
    int a = 1;
    int b = 1;
    int x = 1;
    int * c = &x;
    Modify(a, &b, c);   // a je předáván hodnotou, b je předáván odkazem vytvořením pointrem,
                        // c je pointer předány hodnotou
    // b a x jsou změněny
    return(0);
}

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Reference (computer science) na anglické Wikipedii.

Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.

Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Reference_(programování)
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.