Diferencia entre llamada por valor y llamada por referencia

Tabla de contenido:

Anonim

En los lenguajes de programación, las funciones se pueden invocar de dos formas: lo que se conoce como Llamada por valor y Llamada por referencia.

En este tutorial, aprenderá,

  • ¿Qué es el método de llamada por valor?
  • ¿Qué es el método de llamada por referencia?
  • Ejemplo de un método de llamada por valor
  • Ejemplo de un método de llamada por referencia
  • Llamar por valor frente a Llamar por referencia
  • Ventajas de usar el método de llamada por valor
  • Ventajas de usar el método de llamada por referencia
  • Desventajas de usar el método de llamada por valor
  • Desventajas de usar el método de llamada por referencia

¿Qué es el método de llamada por valor?

El método de llamada por valor copia el valor de un argumento en el parámetro formal de esa función. Por lo tanto, los cambios realizados en el parámetro de la función principal no afectan el argumento.

En este método de paso de parámetros, los valores de los parámetros reales se copian en los parámetros formales de la función y los parámetros se almacenan en diferentes ubicaciones de memoria. Por lo tanto, cualquier cambio realizado dentro de las funciones no se refleja en los parámetros reales de la persona que llama.

DIFERENCIA CLAVE

  • En el método de llamada por valor, el valor original no se modifica, mientras que en el método de llamada por referencia, se modifica el valor original.
  • En Llamar por valor, se pasa una copia de la variable, mientras que en Llamar por referencia, se pasa una variable en sí.
  • En Llamada por valor, los argumentos reales y formales se crearán en diferentes ubicaciones de memoria, mientras que en Llamada por referencia, los argumentos reales y formales se crearán en la misma ubicación de memoria.
  • La llamada por valor es el método predeterminado en lenguajes de programación como C ++, PHP, Visual Basic NET y C #, mientras que la llamada por referencia solo es compatible con el lenguaje Java.
  • Llamada por valor, las variables se pasan utilizando un método sencillo, mientras que Llamada por referencia, se requieren punteros para almacenar la dirección de las variables.

¿Qué es el método de llamada por referencia?

El método de llamada por referencia copia la dirección de un argumento en el parámetro formal. En este método, la dirección se usa para acceder al argumento real usado en la llamada a la función. Significa que los cambios realizados en el parámetro alteran el argumento de paso.

En este método, la asignación de memoria es la misma que los parámetros reales. Todas las operaciones en la función se realizan sobre el valor almacenado en la dirección del parámetro actual, y el valor modificado se almacenará en la misma dirección.

Ejemplo de un método de llamada 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;}

Producción:

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

Porque la variable declarada 'a' en main () es diferente de la variable 'x' en increment (). En este programa, solo los nombres de las variables son similares, pero su dirección de memoria es diferente y se almacena en diferentes ubicaciones de memoria.

Ejemplo de un método de llamada por referencia

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;}

Producción:

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

Porque la variable declarada 'a' en hace referencia / apunta a la variable 'a' en main (). Aquí el nombre de la variable es diferente, pero ambos apuntan / hacen referencia a las mismas ubicaciones de dirección de memoria.

Llamar por valor frente a Llamar por referencia

Parámetros Llamar por valor Llamar por referencia
Definición Al llamar a una función, cuando pasa valores copiando variables, se conoce como "Llamar por valores". Al llamar a una función, en el lenguaje de programación en lugar de copiar los valores de las variables, se utiliza la dirección de las variables, lo que se conoce como "Call By References".
Argumentos En este método, se pasa una copia de la variable. En este método, se pasa una variable en sí.
Efecto Los cambios realizados en una copia de la variable nunca modifican el valor de la variable fuera de la función. El cambio en la variable también afecta el valor de la variable fuera de la función.
Alteración de valor No le permite realizar cambios en las variables reales. Le permite realizar cambios en los valores de las variables mediante llamadas a funciones.
Paso de variable Los valores de las variables se pasan mediante un método sencillo. Se requieren variables de puntero para almacenar la dirección de las variables.
Modificación de valor Valor original no modificado. Se modifica el valor original.
Ubicación de la memoria Los argumentos reales y formales se crearán en diferentes ubicaciones de memoria. Los argumentos reales y formales se crearán en la misma ubicación de memoria.
La seguridad Los argumentos reales permanecen seguros ya que no se pueden modificar accidentalmente. Los argumentos reales no son seguros. Pueden modificarse accidentalmente, por lo que debe manejar las operaciones de argumentos con cuidado.
Defecto Por defecto en muchos lenguajes de programación como C ++. PHP. Visual Basic NET y C #. Es compatible con la mayoría de lenguajes de programación como JAVA, pero no de forma predeterminada.

Ventajas de usar el método de llamada por valor

Pros / beneficios de un método de llamada por valor:

  • El método no cambia la variable original, por lo que conserva los datos.
  • Siempre que se llame a una función, nunca afecte el contenido real de los argumentos reales.
  • Valor de los argumentos reales pasados ​​a los argumentos formales, por lo que cualquier cambio realizado en el argumento formal no afecta los casos reales.

Ventajas de usar el método de llamada por referencia

Ventajas de usar el método de llamada por referencia:

  • La función puede cambiar el valor del argumento, lo cual es bastante útil.
  • No crea datos duplicados para mantener un solo valor, lo que le ayuda a ahorrar espacio en la memoria.
  • En este método, no hay copia del argumento realizado. Por lo tanto, se procesa muy rápido.
  • Le ayuda a evitar cambios realizados por error
  • Una persona que lee el código nunca sabe que el valor se puede modificar en la función.

Desventajas de usar el método de llamada por valor

A continuación, se muestran las principales desventajas / desventajas de un método de llamada por valor:

  • Los cambios en los parámetros reales también pueden modificar las variables de argumento correspondientes.
  • En este método, los argumentos deben ser variables.
  • No puede cambiar directamente una variable en el cuerpo de una función.
  • En ocasiones, los argumentos pueden ser expresiones complejas
  • Hay dos copias creadas para la misma variable que no es eficiente en memoria.

Desventajas de usar el método de llamada por referencia

A continuación, se muestran las principales desventajas de usar el método de llamada por referencia:

  • Fuerte garantía no nula. Una función que toma una referencia debe asegurarse de que la entrada no sea nula. Por lo tanto, no es necesario realizar una verificación nula.
  • Pasar por referencia hace que la función no sea pura teóricamente.
  • Una garantía de por vida es un gran problema con las referencias. Esto es especialmente peligroso cuando se trabaja con lambdas y programas de subprocesos múltiples.