Sobes.tech
Junior

O que é uma transferência por referência?

sobes.tech IA

Resposta da IA

A passagem por referência (pass by reference) é um mecanismo pelo qual uma função recebe o endereço (referência) de uma área de memória onde os dados do argumento são armazenados. Como resultado, quaisquer alterações feitas na variável dentro da função refletem-se na variável original fora dela.

Características principais:

  • É passada a direção de memória, não uma cópia do valor.
  • A função trabalha diretamente com os dados originais.
  • As alterações dentro da função permanecem após sua conclusão.
  • Aplicável a objetos, arrays e outros tipos de dados referenciados em muitas linguagens de programação.
  • Em algumas linguagens (por exemplo, C++), é possível passar tipos primitivos por referência explicitamente usando ponteiros ou referências.

Exemplo de código em Python:

# Passagem de lista (tipo referenciado)
def modify_list(my_list):
    my_list.append(4) # Alteração na lista original

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

# Passagem de número (tipo primitivo - passagem por valor em Python)
def modify_number(my_number):
    my_number += 1 # Uma cópia local é criada e modificada

value = 5
modify_number(value)
print(value) # Vai mostrar 5 - o valor original não mudou

Exemplo de código em C++:

#include <iostream>

// Passagem por referência
void modify_value_ref(int &val) {
    val += 10; // Alteração na variável original
}

// Passagem por valor (para comparação)
void modify_value_copy(int val) {
    val += 10; // Alteração na cópia local
}

int main() {
    int a = 5;
    modify_value_ref(a);
    std::cout << "Depois de referência: " << a << std::endl; // Vai mostrar Depois de referência: 15

    int b = 5;
    modify_value_copy(b);
    std::cout << "Depois de cópia: " << b << std::endl; // Vai mostrar Depois de cópia: 5

    return 0;
}

Vantagens:

  • É eficiente ao trabalhar com grandes volumes de dados, pois não requer cópia.
  • Permite que funções modifiquem múltiplos valores através dos argumentos.

Desvantagens:

  • Pode tornar o código menos previsível se a função modificar os argumentos sem indicá-lo claramente no nome ou na documentação.
  • Requer cautela para evitar efeitos colaterais indesejados.