next up previous contents index
suivant: Branchements et aiguillages monter: Instructions précédent: Passage par valeur   Table des matières   Index

Caractère non applicatif

Désormais, la valeur retournée par une fonction dépend non seulement des valeurs des arguments, mais aussi du contexte d'invocation. Celui-ci comprend non seulement le cadre d'invocation, mais aussi des variables de classe, comme la variable état dans l'exemple suivant :

package exemples;

class FonctionImperative {
  static int état = 0;
  static int f(int x) {
    état++;
    return x + état;
  }
  public static void main(String[] args) {
    System.out.println("f(0) = " + f(0));        // --> f(0) = 1
    System.out.println("f(0) = " + f(0));        // --> f(0) = 2
    System.out.println("f(0) = " + f(0));        // --> f(0) = 3 
  }
}

Une variable de classe peut être à la fois lue et modifiée par une invocation d'une fonction. Comme une telle variable conserve sa valeur entre deux appels d'une fonction, une même expression d'invocation peut retourner des valeurs différentes. La propriété caractéristique du style applicatif (la valeur d'une expression ne dépend que des valeurs des sous-expressions et de l'opération qui les combine) n'est donc plus valable. Une fonction n'est plus nécessairement une fonction au sens mathématique. Ainsi une fonction à zéro argument n'est plus nécessairement une constante. L'un des exemples les plus utiles est la fonction de génération de nombres aléatoires Math.random(), dont chaque invocation retourne un nouveau nombre flottant.



Rene' LALEMENT 2002-11-07