Différence entre appel par valeur et appel par référence

Table des matières:

Anonim

Dans les langages de programmation, les fonctions peuvent être appelées de deux manières: ce qui est connu sous le nom de Call by Value et Call by Reference.

Dans ce tutoriel, vous apprendrez,

  • Qu'est-ce que la méthode d'appel par valeur?
  • Qu'est-ce que la méthode Call by Reference?
  • Exemple de méthode d'appel par valeur
  • Exemple d'une méthode d'appel par référence
  • Appel par valeur vs appel par référence
  • Avantages de l'utilisation de la méthode Appel par valeur
  • Avantages de l'utilisation de la méthode Call by Reference
  • Inconvénients de l'utilisation de la méthode Call by value
  • Inconvénients de l'utilisation de la méthode Call by reference

Qu'est-ce que la méthode Call by Value?

La méthode Call by value copie la valeur d'un argument dans le paramètre formel de cette fonction. Par conséquent, les modifications apportées au paramètre de la fonction principale n'affectent pas l'argument.

Dans cette méthode de transmission de paramètres, les valeurs des paramètres réels sont copiées dans les paramètres formels de la fonction et les paramètres sont stockés dans différents emplacements de mémoire. Ainsi, les modifications apportées à l'intérieur des fonctions ne sont pas reflétées dans les paramètres réels de l'appelant.

DIFFÉRENCE CLÉ

  • Dans la méthode Appel par valeur, la valeur d'origine n'est pas modifiée, tandis que dans la méthode Appel par référence, la valeur d'origine est modifiée.
  • Dans Call by value, une copie de la variable est passée tandis que dans Call by reference, une variable elle-même est passée.
  • Dans Appel par valeur, les arguments réels et formels seront créés dans des emplacements mémoire différents, tandis que dans Appel par référence, les arguments réels et formels seront créés dans le même emplacement mémoire.
  • L'appel par valeur est la méthode par défaut dans les langages de programmation tels que C ++, PHP, Visual Basic NET et C #, tandis que l'appel par référence n'est pris en charge que par le langage Java.
  • Appel par valeur, les variables sont passées à l'aide d'une méthode simple tandis que Appel par référence, des pointeurs sont nécessaires pour stocker l'adresse des variables.

Qu'est-ce que la méthode Call by Reference?

La méthode Call by reference copie l'adresse d'un argument dans le paramètre formel. Dans cette méthode, l'adresse est utilisée pour accéder à l'argument réel utilisé dans l'appel de fonction. Cela signifie que les modifications apportées au paramètre modifient l'argument de passage.

Dans cette méthode, l'allocation de mémoire est la même que les paramètres réels. Toutes les opérations de la fonction sont effectuées sur la valeur stockée à l'adresse du paramètre réel, et la valeur modifiée sera stockée à la même adresse.

Exemple de méthode Call by Value

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

Production:

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

Parce que la variable déclarée 'a' dans main () est différente de la variable 'x' dans increment (). Dans ce programme, seuls les noms de variables sont similaires, mais leur adresse mémoire est différente et stockée dans différents emplacements de mémoire.

Exemple de méthode Call by Reference

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

Production:

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

Parce que la variable déclarée 'a' dans fait référence / pointe vers la variable 'a' dans main (). Ici, le nom de la variable est différent, mais les deux pointent / font référence aux mêmes emplacements d'adresse mémoire.

Appel par valeur vs appel par référence

Paramètres Appel par valeur Appel par référence
Définition Lors de l'appel d'une fonction, lorsque vous transmettez des valeurs en copiant des variables, cela s'appelle «Appel par valeurs». Lors de l'appel d'une fonction, en langage de programmation au lieu de copier les valeurs des variables, l'adresse des variables est utilisée, elle est connue sous le nom de "Call By References".
Arguments Dans cette méthode, une copie de la variable est transmise. Dans cette méthode, une variable elle-même est transmise.
Effet Les modifications apportées à une copie de variable ne modifient jamais la valeur de la variable en dehors de la fonction. La modification de la variable affecte également la valeur de la variable en dehors de la fonction.
Modification de la valeur Ne vous permet pas d'apporter des modifications aux variables réelles. Vous permet de modifier les valeurs des variables à l'aide d'appels de fonction.
Passage de variable Les valeurs des variables sont transmises à l'aide d'une méthode simple. Des variables de pointeur sont nécessaires pour stocker l'adresse des variables.
Modification de la valeur Valeur d'origine non modifiée. La valeur d'origine est modifiée.
Emplacement de la mémoire Les arguments réels et formels seront créés dans différents emplacements de mémoire Les arguments réels et formels seront créés dans le même emplacement mémoire
Sécurité Les arguments réels restent sûrs car ils ne peuvent pas être modifiés accidentellement. Les arguments réels ne sont pas sûrs. Ils peuvent être modifiés accidentellement, vous devez donc gérer les opérations d'arguments avec soin.
Défaut Par défaut dans de nombreux langages de programmation comme C ++. PHP. Visual Basic NET et C #. Il est pris en charge par la plupart des langages de programmation comme JAVA, mais pas par défaut.

Avantages de l'utilisation de la méthode Appel par valeur

Avantages / avantages d'une méthode d'appel par valeur:

  • La méthode ne modifie pas la variable d'origine, elle préserve donc les données.
  • Chaque fois qu'une fonction est appelée, n'affectez jamais le contenu réel des arguments réels.
  • Valeur des arguments réels passés aux arguments formels, de sorte que toute modification apportée à l'argument formel n'affecte pas les cas réels.

Avantages de l'utilisation de la méthode Call by Reference

Avantages de l'utilisation de la méthode d'appel par référence:

  • La fonction peut changer la valeur de l'argument, ce qui est très utile.
  • Il ne crée pas de données en double pour ne contenir qu'une seule valeur, ce qui vous permet d'économiser de l'espace mémoire.
  • Dans cette méthode, il n'y a pas de copie de l'argument fait. Par conséquent, il est traité très rapidement.
  • Vous aide à éviter les modifications effectuées par erreur
  • Une personne lisant le code ne sait jamais que la valeur peut être modifiée dans la fonction.

Inconvénients de l'utilisation de la méthode Call by value

Voici les principaux inconvénients / inconvénients d'une méthode d'appel par valeur:

  • Les modifications apportées aux paramètres réels peuvent également modifier les variables d'argument correspondantes
  • Dans cette méthode, les arguments doivent être des variables.
  • Vous ne pouvez pas modifier directement une variable dans un corps de fonction.
  • Parfois, l'argument peut être des expressions complexes
  • Il y a deux copies créées pour la même variable qui n'est pas efficace en mémoire.

Inconvénients de l'utilisation de la méthode Call by reference

Voici les principaux inconvénients de l'utilisation de la méthode d'appel par référence:

  • Forte garantie non nulle. Une fonction prenant une référence doit s'assurer que l'entrée est non nulle. Par conséquent, il n'est pas nécessaire d'effectuer une vérification nulle.
  • Le passage par référence rend la fonction non pure en théorie.
  • Une garantie à vie est un gros problème avec les références. Ceci est particulièrement dangereux lorsque vous travaillez avec des lambdas et des programmes multithreads.