Diferença entre Chamada por Valor e Chamada por Referência

Índice:

Anonim

Em linguagens de programação, as funções podem ser chamadas de duas maneiras: conhecida como Chamada por Valor e Chamada por Referência.

Neste tutorial, você aprenderá,

  • O que é o método de chamada por valor?
  • O que é o método Call by Reference?
  • Exemplo de um método de chamada por valor
  • Exemplo de uma chamada por método de referência
  • Chamada por valor x Chamada por referência
  • Vantagens de usar o método Call by value
  • Vantagens de usar chamada pelo método de referência
  • Desvantagens de usar o método Call by value
  • Desvantagens de usar o método de chamada por referência

O que é o método Call by Value?

O método de chamada por valor copia o valor de um argumento para o parâmetro formal dessa função. Portanto, as alterações feitas no parâmetro da função principal não afetam o argumento.

Nesse método de passagem de parâmetro, os valores dos parâmetros reais são copiados para os parâmetros formais da função e os parâmetros são armazenados em diferentes locais da memória. Portanto, quaisquer alterações feitas dentro das funções não são refletidas nos parâmetros reais do chamador.

DIFERENÇA CHAVE

  • No método Chamada por valor, o valor original não é modificado, ao passo que, no método Chamada por referência, o valor original é modificado.
  • Em Chamada por valor, uma cópia da variável é passada, enquanto em Chamada por referência, uma própria variável é passada.
  • Em Call by value, argumentos reais e formais serão criados em diferentes locais da memória, enquanto em Call by reference, argumentos reais e formais serão criados no mesmo local de memória.
  • Chamada por valor é o método padrão em linguagens de programação como C ++, PHP, Visual Basic NET e C #, enquanto Chamada por referência é compatível apenas com a linguagem Java.
  • Chamadas por valor, as variáveis ​​são passadas usando um método direto, enquanto chamadas por referência, ponteiros são necessários para armazenar o endereço das variáveis.

O que é o método Call by Reference?

O método de chamada por referência copia o endereço de um argumento no parâmetro formal. Nesse método, o endereço é usado para acessar o argumento real usado na chamada da função. Isso significa que as alterações feitas no parâmetro alteram o argumento de passagem.

Neste método, a alocação de memória é igual aos parâmetros reais. Todas as operações na função são realizadas no valor armazenado no endereço do parâmetro atual, e o valor modificado será armazenado no mesmo endereço.

Exemplo de método de chamada por valor

void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}

Resultado:

before function calling 10value is 11after function calling 1-0

Porque a variável declarada 'a'in main () é diferente da variável' x 'em increment (). Neste programa, apenas os nomes das variáveis ​​são semelhantes, mas seus endereços de memória são diferentes e armazenados em locais de memória diferentes.

Exemplo de método de chamada por referência

Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}

Resultado:

Before call Value of a =10After call Value of a =11

Porque a variável declarada 'a' em está referenciando / apontando para a variável 'a' em main (). Aqui, o nome da variável é diferente, mas ambos estão apontando / referenciando as mesmas localizações de endereço de memória.

Chamada por valor x Chamada por referência

Parâmetros Chamada por valor Chamada por referência
Definição Ao chamar uma função, quando você passa valores copiando variáveis, isso é conhecido como "Chamada por valores". Ao chamar uma função, em linguagem de programação ao invés de copiar os valores das variáveis, o endereço das variáveis ​​é utilizado, é conhecido como "Call By References
Argumentos Neste método, uma cópia da variável é passada. Neste método, uma variável em si é passada.
Efeito As alterações feitas em uma cópia da variável nunca modificam o valor da variável fora da função. A mudança na variável também afeta o valor da variável fora da função.
Alteração de valor Não permite que você faça alterações nas variáveis ​​reais. Permite fazer alterações nos valores das variáveis ​​usando chamadas de função.
Passagem de variável Os valores das variáveis ​​são passados ​​usando um método direto. As variáveis ​​de ponteiro são necessárias para armazenar o endereço das variáveis.
Modificação de valor Valor original não modificado. O valor original é modificado.
Localização de memória Argumentos reais e formais serão criados em diferentes locais de memória Argumentos reais e formais serão criados no mesmo local de memória
Segurança Os argumentos reais permanecem seguros, pois não podem ser modificados acidentalmente. Os argumentos reais não são seguros. Eles podem ser modificados acidentalmente, portanto, você precisa lidar com as operações de argumentos com cuidado.
Predefinição Padrão em muitas linguagens de programação como C ++. PHP. Visual Basic NET e C #. É suportado pela maioria das linguagens de programação como JAVA, mas não como padrão.

Vantagens de usar o método Call by value

Prós / benefícios de um método de chamada por valor:

  • O método não altera a variável original, portanto, preserva os dados.
  • Sempre que uma função é chamada, nunca afeta o conteúdo real dos argumentos reais.
  • O valor dos argumentos reais passados ​​para os argumentos formais, portanto, quaisquer alterações feitas no argumento formal não afetam os casos reais.

Vantagens de usar chamada pelo método de referência

Prós de usar o método de chamada por referência:

  • A função pode alterar o valor do argumento, o que é bastante útil.
  • Ele não cria dados duplicados para armazenar apenas um valor, o que ajuda a economizar espaço na memória.
  • Neste método, não há cópia do argumento feito. Portanto, é processado muito rápido.
  • Ajuda a evitar alterações feitas por engano
  • Uma pessoa que lê o código nunca sabe que o valor pode ser modificado na função.

Desvantagens de usar o método Call by value

Aqui, estão os principais contras / desvantagens de um método de chamada por valor:

  • Mudanças nos parâmetros reais também podem modificar as variáveis ​​de argumento correspondentes
  • Nesse método, os argumentos devem ser variáveis.
  • Você não pode alterar diretamente uma variável no corpo de uma função.
  • Algum argumento pode ser expressões complexas
  • Existem duas cópias criadas para a mesma variável que não é eficiente em termos de memória.

Desvantagens de usar o método de chamada por referência

Aqui, estão os principais contras de usar o método de chamada por referência:

  • Forte garantia não nula. Uma função que recebe uma referência precisa ter certeza de que a entrada não é nula. Portanto, a verificação de nulos não precisa ser feita.
  • A passagem por referência torna a função não pura teoricamente.
  • Uma garantia vitalícia é um grande problema com referências. Isso é especialmente perigoso ao trabalhar com lambdas e programas multi-threaded.