TP M1207 n°4 - Partie 1 sur 2 - Durée 2h

Révisions et Fonctions/Méthodes en Java

java Logo

Préambule

Révisions

public class QuatreErreurs {
  public static void maine(String[] args) {
    int[] t = new int[]{1;2;3;4};
    System.out.print("[");
    for(int i=0;i<t.length;i++)
      System.out.print(t[i]+",");
    System.out.println(t[t.length]+"]");
  }
}

Le programme doit afficher [1,2,3,4]

Les Fonctions ou Méthodes

On utilisera ici ces deux noms comme synonymes.

Les fonctions ou méthodes permettent de découper votre programme en portion de code réalisant des tâches secondaires à votre programme principal

// Un exemple de fonction en charge d'afficher bonjour à l'écran
public static void bonjour() {
    System.out.println("Bonjour");
}

public static void bonjour() est la signature de la fonction bonjour.

public static sera expliqué au semestre prochain (public veut dire que tout le monde peut utiliser la fonction en dehors de la classe, et static veut dire que c'est une méthode de classe, i.e. commune à toutes les instances/objets de la classe). Vous verrez cela dans les prochains modules de programmation. Pour l'instant on prend pour acquis que toutes vos fonctions/méthodes commenceront par public static.

Le troisième mot clé venant après public static, ici void, est le type ou la classe renvoyé par votre fonction. Ici, votre fonction est en charge d'afficher quelque chose System.out.println("Bonjour"); donc elle ne renvoie rien (void)

Le quatrième mot venant après public static void, ici bonjour est le nom de la fonction. C'est par ce nom qu'elle sera utilisée/appelée dans votre programme.

Enfin on met entre parenthèses les arguments ou paramètres de votre fonction. Ici il n'y en a pas : ().

Rien ne s'affiche. En effet, votre fonction principale ne contient rien.

Votre programme contient deux fonctions : la fonction bonjour et la fonction principale (main).

La fonction bonjour est déclarée mais non utilisée.

public class Bonjour {
  
  public static void bonjour() {
    System.out.println("Bonjour");
  }
  
  public static void main(String[] args) {
    bonjour();
  }
}

Le compilateur java (la JVM) démarre à la première instruction de la fonction principale (main) qui est un appel à la fonction bonjour.

Le compilateur poursuit donc vers la première instruction de la fonction bonjour, qui consiste à afficher la chaîne "Bonjour".

Une fois les instructions de la fonction bonjour achevées, le compilateur retourne dans la fonction main pour passer à une possible instruction suivante.

Lorsqu'on veut créer une fonction renvoyant quelque chose, i.e. la fonction retourne une instance/objet que l'on peut mettre dans une variable pour la manipuler, il faut

  1. indiquer le type ou la classe retourné dans la signature de la fonction ;
  2. et retourner en fin de fonction l'objet avec le mot clé return.

Remarquez que dans le programme ci-dessus : "Bonjour" est une chaîne, bonjour est une variable, bonjour() est une fonction.

On peut ajouter des paramètres/arguments à une fonction. Il faut préciser leurs types ou classes, par exemple public static typeRetourné nomFonction(int a, String s) déclare une fonction prenant en paramètres un entier a et une chaîne s.

Remarquez que dans la fonction principale, la variable bonjour n'est pas nécessaire, on a le même résultat avec la fonction principale suivante.

public static void main(String[] args) {
  System.out.println(bonjour("M.","De Mesmaeker"));
}

Cela veut dire qu'une copie seulement des valeurs de x et y a été passée à la fonction. On parle de passage par valeur. Cela signifie que chaque fonction travaille à partir d'une copie des valeurs passées en argument, chaque fonction dispose de sa propre version des paramètres.

Le passage par valeurs est donc aussi valable pour les chaînes.

Le passage par valeurs est la règle générale de Java.

Attention : ce n'est pas vrai pour les tableaux.

Le tableau reste donc modifié à la sortie de la fonction, c'est ce qu'on attend généralement de l'utilisation des tableaux.

import java.util.Arrays;

public class Tableau {
  
  public static int[] minmax(int[] t) {
    // À vous de faire
  }
  
  public static int[] melangealterne(int[] t1,int[] t2) {
    // Ne fonctionne qu'avec deux tableaux de même taille
    
    // À vous de faire
  }
  
  public static void main(String[] args) {
    int[] t={1,2,3};
    System.out.println(Arrays.toString(minmax(t)));
    System.out.println(Arrays.toString(melangealterne(t,t)));
  }
}

Une pause de 10 mn est possible avant de passer à la deuxième partie une fois tout fini. Si vous avez fini avant les 2h aidez les autres à finir aussi :-)