Sobes.tech
Junior

Mi az a hivatkozás szerinti átadás?

sobes.tech MI

Válasz az MI-től

Hivatkozás szerinti átadás (pass by reference) egy olyan mechanizmus, amely során egy függvény a memória egy olyan címét (referenciáját) kapja meg, ahol az argumentum adatai tárolódnak. Ennek eredményeként a függvényen belül végzett bármilyen változtatás a változón, kívülről is megjelenik az eredeti változón.

Fő jellemzők:

  • A memória címet adjuk át, nem egy érték másolatát.
  • A függvény közvetlenül az eredeti adatokkal dolgozik.
  • A függvényen belüli változtatások a végrehajtás után is megmaradnak.
  • Ez sok programozási nyelvben alkalmazható objektumokra, tömbökre és más referenciális típusokra.
  • Néhány nyelvben (pl. C++) lehetőség van primitív típusokat explicit módon referencia szerint átadni mutatók vagy referenciák használatával.

Python példakód:

# Lista átadása (referenciális típus)
def modify_list(my_list):
    my_list.append(4) # Az eredeti lista módosítása

data = [1, 2, 3]
modify_list(data)
print(data) # [1, 2, 3, 4]

# Szám átadása (primitív típus - érték szerinti átadás Pythonban)
def modify_number(my_number):
    my_number += 1 # Egy helyi másolat jön létre és módosul

value = 5
modify_number(value)
print(value) # 5 - az eredeti érték nem változott

C++ példakód:

#include <iostream>

// Referencia szerinti átadás
void modify_value_ref(int &val) {
    val += 10; // Az eredeti változó módosítása
}

// Érték szerinti átadás (összehasonlítás)
void modify_value_copy(int val) {
    val += 10; // A helyi másolat módosítása
}

int main() {
    int a = 5;
    modify_value_ref(a);
    std::cout << "Referencia után: " << a << std::endl; // 15-et ír ki

    int b = 5;
    modify_value_copy(b);
    std::cout << "Másolat után: " << b << std::endl; // 5-öt ír ki

    return 0;
}

Előnyök:

  • Hatékony nagy adatmennyiség esetén, mivel nem szükséges másolat készítése.
  • Lehetővé teszi, hogy a függvények több értéket módosítsanak argumentumokon keresztül.

Hátrányok:

  • Csökkentheti a kód előrejelzhetőségét, ha a függvény az argumentumokat név vagy dokumentáció nélkül módosítja.
  • Óvatosságot igényel a nem kívánt mellékhatások elkerülése érdekében.