Sobes.tech
Junior

Co je to předání odkazem?

sobes.tech AI

Odpověď od AI

Předání odkazem (pass by reference) je mechanismus, při kterém je funkci předána adresa (odkaz) na oblast paměti, kde jsou uložena data argumentu. Výsledkem je, že jakákoli změna provedená s proměnnou uvnitř funkce se odráží na původní proměnné mimo ni.

Hlavní vlastnosti:

  • Předává se adresa paměti, nikoli kopie hodnoty.
  • Funkce pracuje přímo s původními daty.
  • Změny uvnitř funkce přetrvávají po jejím ukončení.
  • Použitelné u objektů, polí a dalších referenčních typů v mnoha programovacích jazycích.
  • V některých jazycích (například C++) lze explicitně předat primitivní typy odkazem pomocí ukazatelů nebo odkazů.

Příklad kódu v Pythonu:

# Předání seznamu (referenční typ)
def modify_list(my_list):
    my_list.append(4) # Změna původního seznamu

data = [1, 2, 3]
modify_list(data)
print(data) # Vypíše [1, 2, 3, 4]

# Předání čísla (primitivní typ - předání hodnotou v Pythonu)
def modify_number(my_number):
    my_number += 1 # Vytvoří se lokální kopie, která se mění

value = 5
modify_number(value)
print(value) # Vypíše 5 - původní hodnota se nezměnila

Příklad kódu v C++:

#include <iostream>

// Předání odkazem
void modify_value_ref(int &val) {
    val += 10; // Změna původní proměnné
}

// Předání hodnotou (pro srovnání)
void modify_value_copy(int val) {
    val += 10; // Změna lokální kopie
}

int main() {
    int a = 5;
    modify_value_ref(a);
    std::cout << "Po odkazu: " << a << std::endl; // Vypíše 15

    int b = 5;
    modify_value_copy(b);
    std::cout << "Po kopii: " << b << std::endl; // Vypíše 5

    return 0;
}

Výhody:

  • Efektivní při práci s velkými objemy dat, protože není potřeba kopírování.
  • Umožňuje funkcím měnit více hodnot přes argumenty.

Nevýhody:

  • Může učinit kód méně předvídatelným, pokud funkce mění argumenty bez jasného označení v názvu nebo dokumentaci.
  • Vyžaduje opatrnost, aby se zabránilo nežádoucím vedlejším efektům.