Odkaz (programování)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 17. října 2019; kontroly vyžadují 14 úprav .

Reference v programování  je objekt, který ukazuje na určitá data, ale neukládá je. Získání objektu odkazem se nazývá dereferencování .

Odkaz není ukazatel , ale je to prostě jiný název objektu. Hlavní rozdíl mezi odkazem a ukazateli je v tom, že ukazatel je celé číslo, a proto jsou pro něj dostupné operace s celými čísly, zatímco pro referenci jsou k dispozici pouze operace kopírování a dereference.

V programovacích jazycích může být odkaz implementován jako proměnná obsahující adresu místa v paměti . Některé jazyky na vysoké úrovni mají také schopnost používat odkazy na objekty při předávání objektů do a z podprogramu.

Příklady implementace odkazů

C++

Reference v C++ musí být spojeny s nějakým objektem. V C++ tedy neexistují žádné "nulové odkazy" (nepřidružené k žádnému objektu). Dereferencování odkazů v C++ nevyžaduje speciální operátor. V C++  jsou tedy odkazy formou přímého předání adresy do zásobníku, čímž se obejde kopírování a ukazatele. Při kompilaci jsou všechny odkazy na objekt a jeho název nahrazeny jedním číslem tohoto objektu.

V následujícím příkladu je parametr x předán hodnotou a výsledek je předán odkazem. Výsledek funkce se umístí do výsledku:

#include <iostream> pomocí jmenného prostoru std ; // bez tohoto záznamu bychom museli k cout a endl připojit "std::". prázdný čtverec ( int x , int a výsledek ) { vysledek = x * x ; } int main () { int y = 0 ; //Inicializuje čtverec ( 3 , y ); cout << "y=" << y << endl ; //y=9 návrat 0 ; }

Java a C#

Java nemá koncept ukazatele a C# místo něj používá koncept odkazu. Dereferencování referencí a převzetí adres objektů k přiřazení k referencím nevyžaduje speciální operátor.

PHP

Reference v PHP jsou prostředkem pro přístup k obsahu jedné proměnné pod různými názvy. Nejsou jako ukazatele C a nejsou aliasy tabulky symbolů. V PHP jsou název proměnné a její obsah různé věci, takže stejný obsah může mít různá jména. Nejbližší analogií jsou unixové názvy souborů a souborů – názvy proměnných jsou položky adresáře a obsah proměnných jsou samotné soubory. Odkazy v PHP jsou analogické s pevnými odkazy (hardlinks) v souborových systémech Unix.

<?php $a = 'text' ; $b =& $a ; tisk $b ; $a = 5 ; tisk $b ; text 5

Erlang

Reference v Erlangu je  datový typ pro jedinečný identifikátor, který se používá pouze k provádění porovnávání a porovnávání vzorů [1] :

send_kv ( N , K , V ) -> Reference = make_ref (), % vytvořit referenci { server , N } ! { put , self (), Reference , K , V }, % odeslat požadavek včetně reference přijmout { odpovědět , Reference , ok } -> ok % odpověď na požadavek po 5000 -> { error , timeout } % or timeout end .

Viz také

Poznámky

  1. Martin Logan, Eric Merritt, Richard Carlsson. Erlang a OTP v akci. — Manning, 2011. — S. 36 343. — 397 s. — ISBN 9781933988788 .