Passage par valeur, passage par variable
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Connaître la notion de passage par valeur et de passage par référence ;
Connaître le comportement en JavaScript et en Python.
Mise en situation
Selon comment un paramètre est passé à une fonction, le potentiel traitement de la fonction pourra avoir une incidence ou non sur la variable d'origine. En effet, si la variable passée en paramètre est copiée, toute modification effectuée par la fonction ne sera pas répercutée sur la variable d'origine. Et inversement si il s'agit d'une référence.
Il est important de bien maîtriser ces aspects lorsque l'on utilise des fonctions, car les deux comportements sont susceptibles de mener à des résultats très différents dans l'exécution du programme.
Définition : Passage par valeur
Le passage d'un paramètre par valeur copie la valeur du paramètre dans une variable locale à la fonction.
Ainsi, si l'argument est modifié, le paramètre passé à la fonction ne l'est pas.
Fondamental :
Le passage des types primitifs en Python et en JavaScript s'apparente à un passage par valeur.
Exemple : Passage par valeur en Python
Voici un exemple de passage par valeur en Python.
def doubleBankAccount(amount):
amount = amount * 2
bankAccountAmount = 777
doubleBankAccount(bankAccountAmount)
print(bankAccountAmount)
777
Ici les valeurs ayant un type primitif ne sont pas modifiées suite à l'appel de la fonction.
Exemple : Passage par valeur en JavaScript
On obtient le même comportement en JavaScript.
function doubleBankAccount (amount) {
amount = amount * 2
}
let bankAccountAmount = 777
doubleBankAccount(bankAccountAmount)
console.log(bankAccountAmount)
777
Définition : Passage par référence
Le passage d'un paramètre par référence copie la référence du paramètre dans un argument qui une variable locale à l'étendue de la fonction.
Ainsi, si l'argument est modifié, le paramètre passé à la fonction l'est aussi.
Fondamental :
Le passage des types composés en Python et en JavaScript s'apparente à un passage par référence.
Exemple : Passage par référence en JavaScript
Voici un exemple de passage par référence en JavaScript.
function addSpecialNumber(numbers) {
numbers.push(23)
}
let lottoNumbers = [32, 41, 130]
addSpecialNumber(lottoNumbers)
console.log(lottoNumbers)
[32, 41, 130, 23]
Ici lottoNumber
, étant associé à une valeur d'un type composé est modifiée suite à l'appel de la fonction.
Exemple : Passage par référence en Python
On obtient le même comportement en Python.
def addSpecialNumber(numbers):
numbers.append(23)
lottoNumber = [32, 41, 130]
addSpecialNumber(lottoNumber)
print(lottoNumber)
[32, 41, 130, 23]
Complément : Passage par assignation
En Python, le passage des arguments se fait plus exactement par affectation : l'affectation ne fait que créer des références aux objets et il n'y a pas d'alias entre le nom d'un argument dans l'étendue appelante et l'étendue appelée. Ainsi il n'y a donc pas d'appel par référence en soi.
Voir l'élément de documentation ici : https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-reference
À retenir
Un passage par valeur copie la valeur dans une variable de l'étendue d'une fonction. Un passage par référence copie la référence dans une variable de l'étendu d'une fonction.
En JavaScript et en Python, le passage par valeur s'applique sur les types primitifs, le passage par référence s'appliquer sur les types composés.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.