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

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

Différence clé - Appelez par valeur vs appel par référence
 

De nombreux langages de programmation utilisent des fonctions. Une fonction est un ensemble de déclarations pour effectuer une tâche spécifique. Le code principal peut être divisé en plusieurs fonctions et les appeler. Il existe deux façons d'appeler une fonction telle que l'appel par valeur et l'appel par référence. Dans la méthode d'appel par valeur, des copies des variables sont transmises dans la fonction. S'il y a un changement dans la valeur de la fonction, il ne modifie pas la valeur d'origine. En appel par référence, les modifications de la variable à l'intérieur de la fonction reflètent la valeur d'origine. Le différence clé Entre l'appel par valeur et l'appel par référence est que, Dans Call by Value, la copie des variables est transmise à la fonction et dans l'appel par référence, les adresses des variables sont transmises à la fonction.  Cet article traite de la différence entre l'appel par valeur et l'appel par référence.

CONTENU

1. Aperçu et différence clé
2. Qu'est-ce que l'appel par valeur
3. Qu'est-ce que l'appel par référence
4. Similitudes entre l'appel par valeur et l'appel par référence
5. Comparaison côte à côte - appel par valeur vs appel par référence sous forme tabulaire
6. Résumé

Qu'est-ce que l'appel par valeur?

En valeur par appel, des copies des variables sont transmises à la fonction. La fonction peut modifier cette valeur copiée mais elle ne modifie pas la valeur d'origine. Ce concept peut facilement être compris en échangeant deux nombres.  Reportez-vous au programme C ci-dessous écrit à l'aide de l'environnement de blocs de code.

Figure 01: Programme pour échanger deux nombres

Selon le programme ci-dessous, la variable «A» a la valeur 20 et la variable «B» a une valeur 30.  Lors de l'appel de la fonction Swap (A, B), ces deux valeurs sont transmises à la fonction d'échange. Dans la fonction d'échange, «A» est copié dans «x» et «b» est copié dans «y». Maintenant, «X» a de la valeur 20 et «y» a une valeur 30.  En utilisant la variable temporable, les deux valeurs sont échangées. Lors de l'impression de la valeur de «x» et «y» à l'intérieur de cette fonction d'échange, la sortie donnera 30 pour «x» et 20 pour «y». Lorsque l'exécution de la fonction d'échange est terminée, le contrôle revient à la fonction principale. Lors de l'impression des valeurs de «a» et «b», dans la fonction principale, les résultats seront les valeurs d'origine. Ils ont 20 pour «A» et 30 pour «B».  Les modifications apportées à l'aide de la fonction d'échange ne se reflètent pas dans le programme principal.

Figure 02: Sortie du programme d'échange

'x' et 'y' à l'intérieur de la fonction d'échange a les valeurs échangées qui sont de 30 et 20 mais ces valeurs ne peuvent pas être utilisées dans le programme principal. Même si «x» et «y» ont échangé des valeurs, ce sont des variables locales pour échanger la fonction et ne sont pas accessibles par la fonction principale. Pour éviter ce problème, l'appel par référence peut être utilisé.

Qu'est-ce que l'appel par référence?

Dans cette méthode, les adresses des variables sont envoyées à la fonction. Reportez-vous au programme C ci-dessous écrit à l'aide de l'environnement de blocs de code.

Figure 03: Échange de deux nombres à l'aide de pointeurs

Selon l'exemple donné ci-dessous, la valeur de «a» est de 20 et la valeur de «b» est de 30. Au lieu de passer des copies de «A» et «B», le programmeur peut envoyer les adresses de «A» et «B» en utilisant la fonction, Swap (& A, & B).

Figure 04: Sortie du programme d'échange à l'aide de pointeurs

Dans l'échange, la fonction doit utiliser des pointeurs car les adresses sont passées et ces adresses doivent être tenues par des pointeurs. À l'intérieur de la fonction, l'adresse de «A» est copiée sur «x» et l'adresse de «b» est copiée sur «y». En utilisant la variable temporaire, les valeurs «x» et «y» sont échangées. Dans cet appel par la méthode de référence, les modifications à l'intérieur de la fonction d'échange se reflètent dans le programme principal. L'impression des valeurs de «a» et «b» dans l'ensemble donnera les valeurs échangées. Maintenant, la sortie de «A» est 30 et «B» est 20. Comme la fonction prend l'adresse des variables, les modifications apportées à l'intérieur de la fonction affectent les valeurs d'origine.

Quelle est la similitude entre l'appel par valeur et l'appel par référence?

  • Ces deux méthodes sont utilisées pour appeler des fonctions / méthodes.

Quelle est la différence entre l'appel par valeur et l'appel par référence?

Appel par valeur vs appel par référence

Dans Call by Value, des copies des variables sont transmises dans la fonction, donc les modifications apportées à l'intérieur de la fonction, ne modifieront pas la valeur d'origine. En appel par référence, l'adresse des variables est transmise à la fonction, donc les modifications apportées aux variables à l'intérieur de la fonction, modifieront la valeur d'origine.
 Modification de la valeur
En valeur d'appel, la valeur d'origine ne change pas. Dans l'appel par référence, les valeurs d'origine changent.

Résumé - Appel par valeur vs appel par référence

Appel par valeur et appel par référence sont des méthodes d'appel de la fonction. La différence entre l'appel par valeur et l'appel par référence est que dans l'appel par valeur, les copies des variables sont transmises à la fonction et dans l'appel par référence, les adresses des variables sont transmises à la fonction.  Utilisation de l'appel par valeur ou de l'appel par référence dépend de la tâche à effectuer.

Téléchargez la version PDF de l'appel par valeur vs appelez par référence

Vous pouvez télécharger la version PDF de cet article et l'utiliser à des fins hors ligne selon la note de citation. Veuillez télécharger la version PDF ici différence entre l'appel par valeur et l'appel par référence

Référence:

1.Jaiswal, Haresh . «11 Appelez par valeur vs appel par référence." Youtube, YouTube, 24 décembre. 2015. Disponible ici