Paramètres

01 - Introduction 04 - Passage par référence
02 - Mémoire 05 - Exercices
03 - Passage par valeur

01

Introduction

En Informatique, un paramètre est une donnée, dont la valeur est manipulée par une section de code. En Delphi, on parle généralement de paramètres d'une fonction ou d'une procédure. On appelle argument la valeur qui est attribuée à un paramètre.

Exemple d'une procédure avec deux paramètres
{
 La procédure p définit deux paramètres, dont l'un est du type string et l'autre du type integer
}

procedure p(s : string; x : integer);
begin
  {...}
end;

La plupart des langages de programmation offre plusieurs mécanismes pour attribuer les arguments aux paramètres, que l'on appelle passage des arguments. Les deux mécanismes principaux sont le « passage par valeur » et le « passage par référence ». Cependant, pour comprendre leur fonctionnement, il faut d'abord comprendre comment fonctionne la mémoire d'un ordinateur.

02

Mémoire

La mémoire informatique est un dispositif électrotechnique dans lequel un ordinateur place les données lors de leur traitement. La mémoire informatique la plus connue est la mémoire vive, qui a une très bonne rapidité d'accès et une grande vitesse de transfert. La mémoire informatique est indexée par des adresses. Chaque adresse pointe vers un endroit dans la mémoire, qui peut contenir une information d'une taille fixe.

Lors d'un appel de fonction, une nouvelle zone est réservée dans la mémoire, dans laquelle la fonction peut sauvegarder des données. Cette zone, appelée frame, évite qu'une fonction puisse écrire à une adresse dans la mémoire, dont la valeur est encore utilisée.

stack.png

Un frame est subdivisé en plusieurs parties, dont une partie contient les paramètres de la fonction.

03

Passage par valeur

Le passage par valeur est le passage d'arguments le plus utilisé. En utilisant le passage par valeur, la fonction travaille avec une copie locale des arguments, c.-à-d. la valeur des arguments est copiée dans la zone mémoire du frame réservée aux paramètres de la fonction. La copie locale est donc une entité distincte et en conséquence, les modifications éventuelles apportées au paramètre à l'intérieur de la fonction n'affectent pas la variable originale.

Les modifications effectuées à l'intérieur de la fonction ne sont pas répercutées à l'extérieur.

La vidéo ci-dessous montre clairement le fonctionnement du passage par valeur. La modification du paramètre « x » dans la procédure f() laisse inchangée la valeur de la variable « a » utilisée comme argument lors de l'appel de la fonction.

You must install Adobe Flash to view this content.

Avec le passage par valeur, il est aussi tout à fait possible d'utiliser des valeurs littérales (valeurs fixes) comme argument lors des appels aux fonctions.

Exemples d'appels de fonctions avec valeurs littérales
power(2, 5);
isAnagram('abba');
contains('bananarama', 'anana');

04

Passage par référence

Aucune nouvelle variable n'est créée et, en conséquence, les modifications éventuelles apportées au paramètre à l'intérieur de la fonction affectent également l'argument :

Les modifications effectuées à l'intérieur de la fonction sont répercutées à l'extérieur.

Le passage par référence en Delphi doit être explicitement indiqué. Pour ce faire, on ajoute le mot-clé « VAR » aux paramètres concernés:

Exemple d'un passage par référence
{
 La procédure p ci-dessous définit deux paramètres, dont le paramètre « s »
 est passé par valeur et le paramètre « x » est passé par référence
}

procedure p(s : string; VAR x : integer);
begin
  {...}
end;

La vidéo ci-dessous montre clairement le fonctionnement du passage par référence. La modification du paramètre « x » dans la procédure f() change la valeur de la variable « a », utilisée comme argument lors de l'appel de la fonction.

You must install Adobe Flash to view this content.

Avec le passage par référence, il n'est pas possible d'utiliser des valeurs littérales comme argument lors des appels aux fonctions.

05

Exercices

  1. Donnez la définition des mots suivants:
    1. paramètre
    2. argument
    3. adresse
    4. frame
  2. Expliquez la différence entre le passage par valeur et la passage par référence.
  3. Pourquoi ne peut-on pas utiliser des valeurs littérales comme argument avec le passage par référence?
  4. Que va afficher le programme suivant:
Exemple de la procédure exem
procedure exem (VAR a, b : integer);
var
  i : integer;

begin
  i := 1;
  while (b > 0) AND (b < 20) do
    begin
      a := a + b + i;
      b := b - 1;
      i := i + 1
    end
end;

var
  x, y : integer;

 begin
  x:=2; y:=0;
  exem(x, y);
  writeln (x, '-', y);

  x:=2; y:=1;
  exem(x, y);
  writeln (x, '-', y);

  x:=2; y:=0;
  exem(x, x);
  writeln (x, '-', y);
end.
  1. Que va afficher le programme suivant:
Exemple de la procédure exple
procedure exple(z: integer; var x,y:integer);
begin
  while (x>=z) and (y>0) do
    begin
      x:=x+z;
	  z:=x-y+z-2;
	  y:=y-1;
    end;
end;

var
  a, b : integer;

begin
  a:=4; b:=3;
  exple(1, a, b);
  writeln(a, '-', b);

  a:=9; b:=2;
  exple(b, a, a);
  writeln(a, '-', b);
end.
Sign In