Diferencia entre llamada por valor y llamada por referencia

Diferencia clave entre llamada por valor y llamada por referencia

  • En el mรฉtodo Llamada por valor, el valor original no se modifica, mientras que en el mรฉtodo Llamada por referencia, se modifica el valor original.
  • En Llamada por valor, se pasa una copia de la variable, mientras que en Llamada 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.
  • Llamar 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 se admite en Java idioma.
  • Las variables de llamada por valor se pasan mediante un mรฉtodo sencillo, mientras que se requieren punteros de llamada por referencia para almacenar la direcciรณn de las variables.

Diferencia entre llamada por valor y llamada por referencia

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.

ยฟQuรฉ es el mรฉtodo 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.

ยฟQuรฉ es el mรฉtodo de llamada por referencia?

La llamada por mรฉtodo de referencia copia la direcciรณn de un argumento en el parรกmetro formal. En este mรฉtodo, la direcciรณn se utiliza para acceder al argumento real utilizado en la llamada a la funciรณn. Significa que los cambios realizados en el parรกmetro alteran el argumento que se pasa.

En este mรฉtodo, la asignaciรณn de memoria es la misma que los parรกmetros reales. Todas las operaciones de la funciรณn se realizan sobre el valor almacenado en la direcciรณn del parรกmetro real, y el valor modificado se almacenarรก en la misma direcciรณn.

Ejemplo de cรณdigo C 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;
        }

Salida:

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

Porque la variable declarada 'a' en main() es diferente de la variable 'x' en incremento(). En este programa sรณlo los nombres de las variables son similares, pero sus direcciones de memoria son diferentes y se almacenan en diferentes ubicaciones de memoria.

Java Ejemplo de cรณdigo de un mรฉtodo de llamada por referencia

Public static void main(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;
}

Salida:

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

Porque la variable declarada 'a' 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 direcciones de memoria.

Llamada por valor frente a llamada por referencia

Parรกmetros Llamada por valor Llamar por referencia
Definiciรณn Al llamar a una funciรณn, cuando pasa valores copiando variables, se conoce como "Llamada 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 โ€œLlamada por referenciasโ€.
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 ningรบn cambio 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 Argumentos reales y formales.
se crearรก en diferentes
ubicaciรณn de memoria
Argumentos reales y formales.
serรก creado en el mismo
ubicaciรณn de memoria
Seguridad Los argumentos reales permanecen
seguros ya que no se pueden modificar
accidentalmente.
Los argumentos reales no son
Seguro. Ellos pueden ser
modificado accidentalmente, por lo que debe manejar las operaciones de argumentos con cuidado.
Predeterminado Por defecto en muchas programaciones
idiomas como C++.PHP. Visual Basic NET y C#.
Es apoyado por la mayorรญa
lenguajes de programaciรณn como JAVA, pero
no por defecto.

Ventajas de utilizar el mรฉtodo Llamada por valor en C

Pros/beneficios de una llamada por valor en C:

  • El mรฉtodo no cambia la variable original, por lo que preserva los datos.
  • Siempre que se llame a una funciรณn, nunca afecte el contenido real de los argumentos reales.
  • El valor de los argumentos reales se pasa a los argumentos formales, por lo que cualquier cambio realizado en el argumento formal no afecta los casos reales.

Ventajas de utilizar el mรฉtodo Llamada por referencia

Ventajas de utilizar 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 contener un solo valor, lo que le ayuda a ahorrar espacio en la memoria.
  • En este mรฉtodo, no hay copia del argumento realizado. Por eso 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 utilizar el mรฉtodo Llamada por valor

A continuaciรณn se detallan 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 se puede cambiar directamente una variable en el cuerpo de una funciรณn.
  • A veces los argumentos pueden ser expresiones complejas.
  • Hay dos copias creadas para la misma variable que no ahorra memoria.

Desventajas de utilizar el mรฉtodo Llamada por referencia

Estas son 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 multiproceso.

Resumir este post con: