• 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 29/08/2024

Exécutez des fonctions

Nous continuons notre préparation pour le projet Epicrafter’s Journey en complétant notre boîte à outils.

Marc revient vers vous et nous demande de progresser :

Après avoir vu la notion de variable, il est temps d’apprendre à exécuter des traitements grâce aux fonctions. C’est l’heure d’aller de l’avant !

Ni une ni deux, vous vous plongez dans cette nouvelle thématique !

Découvrez les fonctions

Une fonction possède :

  • Une signature (on dit aussi prototype)

  • Une implémentation, ce qui correspond aux instructions exécutées.

La signature d’une fonction suit un schéma standard en 5 éléments :

La visibilité

Cet élément influence les zones de code qui seront en droit d’exécuter la fonction.

Une caractéristique

Le comportement d’une fonction peut être altéré par cet élément. Plusieurs mots-clés Java sont applicables ici comme final ou static. Nous y reviendrons.

Le type retour

Une fonction peut retourner ou non une valeur. Comme le langage Java est typé il faut définir à l’avance quel type de donnée sera renvoyé.

Le nom

Le nom sera utilisé pour exécuter la fonction au moment voulu. J'encourage l'utilisation de nom à forte valeur sémantique et à la notation Camel case.

Les paramètres

Une fonction peut recevoir des données en entrée. Ces données seront alors exploitées durant le traitement.

Voici un exemple :public static void main(String[] args)

Illustration d'une déclaration de méthode en Java avec les parties étiquetées
Syntaxe Java

Mais nous l’avons déjà vu cette fonction !

Absolument, maintenant nous sommes en mesure d'interpréter sa signature :

  • la visibilité : public

  • la caractéristique : static.

  • le type retour : void

  • le nom : main

  • les paramètres : String[] args

Certaines de ses notions sont directement liées à la programmation orientée objet que l’on étudiera plus tard dans le cours.

Pour l’instant, vous pouvez considérer que la visibilité public permet à notre fonction d’être exécutées depuis d’autres fichiers et que le mot-clé static nous simplifie l’appel de la fonction. D’ailleurs nous utiliserons ces deux aspects tout au long du chapitre.

Et comment fait-on appel à une fonction ?

Excellente question ! Étant donné que nous utilisons pour l’instant des méthodes statiques, alors la syntaxe est : [Nom de classe].[Nom de la méthode]. Par exemple, si une fonction nommée test est codée dans une classe nommée Main, le code seraMain.test(); 

Allez, passons à la pratique !

Écrivez une première fonction simple

Je vous propose d'écrire une fonction qui :

  • N'aura pas de paramètres.

  • N'aura pas de type retour.

  • Aura pour nom : affiche.

  • Affiche le texte “Une fonction en Java a été exécutée” dans la console.

Sauriez-vous définir la signature ? Allez je vous aide ce coup-ci : public static void affiche()

Et que dire de son implémentation ? La voici :

public static void affiche() {
    System.out.println(“Une fonction en Java a été exécutée”);
}

Pour rappel l’instruction System.out.println() permet d’afficher dans la console du texte comme vu lors d’une démonstration précédente.

Écrivez une fonction paramétrée

Cela a l’air simple en fait Java. Rassurez-moi, il y a moyen de faire des choses plus compliquées ?

Je l'admets : c'était vraiment une fonction simple. Alors ajoutons un peu de complexité avec les paramètres. Reprenons la fonction précédente et faisons en sorte que le texte affiché dans la console soit récupéré en paramètre de la fonction :

public static void affiche(String texte) {
    System.out.println(texte);
}

Notez que le paramètre est écrit entre les parenthèses de la fonction.

On dirait une variable, non ?

Je vois que vous êtes de fins observateurs. Absolument ! Un paramètre n’est rien d’autre qu’une variable et sera donc composé d’un type et d’un nom. La portée de la variable est la fonction. En dehors de la fonction impossible d’y accéder.

Voyons un autre exemple dans la démonstration suivante :

Pas mal, n’est-ce pas ? Nous pouvons retenir :

  • Qu’une fonction peut avoir plusieurs paramètres.

  • Qu’une fonction peut retourner une valeur grâce au mot-clé return.

  • Que le mot-clé final peut être mis devant un paramètre. C’est une bonne pratique de programmation car un paramètre d’entrée n’a pas pour vocation à être modifié par la fonction.

Voici le code écrit :

public static int addition(final int entier1, final int entier2) {
    return entier1 + entier2;
}

Écrivez une fonction récursive

Voyons à présent une certaine catégorie de fonctions : les fonctions récursives.

Une fonction récursive est une fonction qui s'appelle elle-même !

Dans quelle situation est-ce nécessaire ?

Principalement lorsque l’on souhaite éviter un code répétitif pour exécuter une chaîne de traitement où chaque traitement est le même mais avec des paramètres d’entrée différents. Voici un exemple :

Decompte(valeur) {
    Affiche la valeur
    Appel Decompte(valeur-1)
}

J’ai volontairement écrit en pseudo-code ici pour que vous vous concentriez sur la logique du traitement et non sur la syntaxe du Java. Le but de cette fonction est de réaliser un décompte. À chaque fois qu’on rentre dans la fonction on affiche la valeur puis on appelle la même fonction en transmettant en paramètre la valeur moins un. Ainsi chaque appel aura un résultat différent.

Mais ce code a un problème ! Il s’exécutera sans fin (ou plutôt jusqu’à ce qu’on ait consommé toute la mémoire disponible pour notre application). Pour résoudre ce point, une fonction récursive doit avoir un critère d’arrêt. Complétons la fonction :

Decompte(valeur) {
    Si la valeur est supérieure ou égale à 0
    Alors
        Affiche la valeur
        Appel Decompte(valeur-1)
}

Au moment où la valeur attendra -1 alors la fonction ne s’appellera plus elle-même et le traitement sera arrêté.

Voici le code en Java :

public static void decompte(final int valeur) {
    if(valeur >= 0) {
        System.out.println(valeur);
        decompte(valeur-1);
    }
]

On n'a pas vu cette instruction if, c’est quoi ?

En effet ! Comme critère d’arrêt j’ai utilisé ce qu’on appelle une condition en programmation. Suivez-moi dans le prochain chapitre pour que je vous explique précisément ce point.

À vous de jouer

Contexte

Marc :

Alors tu t’en sors avec les fonctions ? Tiens, je te propose un exercice de programmation. Essaye de créer une fonction paramétrée qui permet d’afficher un texte dans une console. Je vais t’écrire une consigne.

Dans le même projet que pour le chapitre précédent, complétez le code en suivant la consigne suivante.

Consignes

  1. Ajoutez une nouvelle fonction nommée affichage qui prend un texte en paramètre et qui n’a pas de type retour.  

  2. La fonction concatène la variable passée en paramètre avec le mot “Bonjour “ puis affiche dans la console le résultat.

  3. Dans la fonction principale main appelez la fonction affichage en passant en paramètre le texte “Marty”. 

Le résultat dans la console sera :

Capture d'écran de la console Eclipse montrant la sortie d'une application Java.
Résultat dans la console

En résumé

  • Une fonction permet d’exécuter une suite d’instructions.

  • Une fonction possède une signature décomposable en plusieurs éléments (visibilité, caractéristique, type retour, nom, paramètres).

  • L’implémentation de la fonction est écrite entre { }

Utiliser des variables et exécuter des fonctions sont une base indispensable. Maintenant voyez d’autres outils pour manipuler nos variables au sein des fonctions !

Exemple de certificat de réussite
Exemple de certificat de réussite