Cours 7 : Fonctions
Déclaration
Insersion d'une fonction dans le squelette... c'est l'ajout d'une recette dans le livre.
Profile de la fonction
Il y a des fonctions qui calculent quelque chose...
public static type_resultat NomDeLaFonction(type_arg1 NomArg1, type_arg2 NomArg2, ...) {...}
... et celles qui se contentent de modifier l'état de l'ordinateur.
public static void NomDeLaFonction(type_arg1 NomArg1, type_arg2 NomArg2, ...) {...}
Ergonomie
Pour concevoir une fonction, il faut d'abord écrire le code qui l'utilise.
double c = power(3.8,5);
affiche(c);
Ce code exige que les fonctions power et affiche aient le profile suivant.
public static double power(double arg, int exposant) {... return res;}
public static void   affiche(double arg)             {...}
Ensuite, on peut réfléchir à ce que calculent les fonctions dont on a défini le profile.
public static double power(double arg, int exposant) {
  double res; // pris dans la pile
  int i;

  res = 1;
  for(i = 0; i < exposant; i = i + 1)
    res = res * arg;
  return res;
}

public static void affiche(double arg) {
  System.out.print("Le résultat est ");
  System.out.println(arg);
}
Le passage des arguments
Les arguments sont copiés dans la pile... Attention au sens que cela a pour les pointeurs !
public static C toto(A a, B b) {
   C c;
   ...
   return c;
}

public static void main(String[] args) {
  A a;
  B b;
  C c;
  ...
  c = toto(a,b);
}
Exemples
Listes d'entiers doublement chaînées
On définit une liste d'entiers par le type à champs nommés suivant dans le fichier List.java.
class List {
    public int  value;
    public List previous;
    public List next;
};
Le fichier Main.java illustre l'utilisation de cette liste.