Version sans JavaScript, en lecture seule : les ateliers, les quiz et l’exécution du code n’y sont pas. Version complète · Catalogue · Se connecter

Support de cours · chapitre 7

Fonctions

Déclaration, prototype, return, surcharge et arguments variadiques.

7.1 Définition

Une fonction récursive se compose de deux éléments :

  • un cas d’arrêt (IN-DIS-PEN-SABLE !) ;
  • un appel récursif qui tend vers le cas d’arrêt.

7.2 Déclaration

static type_de_donnee nomDeLaFonction(type1 argument1, type2 argument2, ...) {
    // liste d'instructions
}
  1. type_de_donnee est le type de valeur que la fonction est censée retourner (char, int, float…).
  2. Si la fonction ne renvoie aucune valeur, on la fait précéder du mot-clé void.
  3. Une fonction doit obligatoirement porter un type de retour.
  4. Mêmes règles de nommage que pour les variables.
  5. Les arguments sont facultatifs, mais les parenthèses restent obligatoires.

La ligne de définition est appelée prototype.

7.5 Renvoi d’une valeur

La fonction peut renvoyer une valeur (et donc se terminer) grâce au mot-clé return.

7.6 Surcharge de fonctions

Quatre fonctions somme, un seul nom

public class Demo {
    public static void main(String[] args) {
        System.out.println(somme(1, 2));
        System.out.println(somme(1.5f, 2.5f));
        System.out.println(somme(1f, 2f, 3f));
        System.out.println(somme(1.9f, 2));
    }

    static int somme(int p1, int p2) {
        return p1 + p2;
    }

    static float somme(float p1, float p2) {
        return p1 + p2;
    }

    static float somme(float p1, float p2, float p3) {
        return p1 + p2 + p3;
    }

    static int somme(float p1, int p2) {
        return (int) p1 + p2;
    }
}

7.7 Arguments variadiques

Les varargs permettent à une fonction de recevoir un nombre variable d’arguments du même type, sans déclarer explicitement un tableau. On note le type suivi de trois points ... ; à l’intérieur de la fonction, c’est un tableau.

Varargs, seuls puis combinés

public class Demo {
    public static void main(String[] args) {
        maMethode(1, 2, 3);
        maMethode(10, 20, 30, 40);
        avecPrefixe("valeur = ", 7, 8);
        System.out.println("total : " + total(1, 2, 3, 4));
    }

    public static void maMethode(int... nombres) {
        for (int nombre : nombres) {
            System.out.println(nombre);
        }
    }

    public static void avecPrefixe(String prefixe, int... nombres) {
        for (int nombre : nombres) {
            System.out.println(prefixe + nombre);
        }
    }

    public static int total(int... nombres) {
        int somme = 0;
        for (int nombre : nombres) {
            somme += nombre;
        }
        return somme;
    }
}