# Retours de Fonctions
Dans le domaine de la programmation, les fonctions sont des blocs de code autonomes conçus pour accomplir une tâche spécifique. Après avoir traité une série d'instructions, une fonction peut, ou non, produire un résultat. Ce résultat est ce que l'on appelle la *valeur de retour* de la fonction. Comprendre les retours de fonctions est fondamental pour construire des programmes modulaires et efficaces, s'appuyant sur les principes de la logique combinatoire pour organiser les opérations.
> [!video] Vidéo explicative
> <iframe width="560" height="315" src="https://www.youtube.com/embed/IgKXfLZ0Dck?si=oMy_T6f9uwgJJxXG" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## 1. Qu'est-ce qu'un retour de fonction ?
> [!definition] Définition
> Un **retour de fonction** est la valeur qu'une fonction transmet à la partie du code qui l'a appelée, une fois son exécution terminée. C'est le moyen principal pour une fonction de communiquer un résultat de son traitement.
Lorsqu'une fonction est exécutée, elle peut effectuer des calculs, manipuler des données ou interagir avec des systèmes externes. Le retour est le mécanisme par lequel le *produit* de ces opérations est mis à disposition du reste du programme.
> [!note] Remarque
> Le concept de retour est distinct des *effets de bord* (side effects), comme l'affichage de texte à l'écran ou la modification d'une variable globale. Un retour est une valeur *explicitement* renvoyée.
## 2. Syntaxe Générale et Flux d'Exécution
Le mot-clé `retourner` (ou `return` dans de nombreux langages comme Python) est utilisé pour spécifier la valeur à renvoyer.
### 2.1. Pseudo-code
```pseudo-code
Fonction NomDeLaFonction(paramètre1, paramètre2)
{
// Instructions de la fonction
resultat = paramètre1 + paramètre2
retourner resultat // La fonction renvoie la valeur de 'resultat'
}
// Appel de la fonction
Déclarer ma_somme
ma_somme = NomDeLaFonction(5, 3) // 'ma_somme' reçoit la valeur 8
Afficher ma_somme // Affiche 8
```
### 2.2. Flux d'Exécution
> [!theorem] Propriété
> Dès qu'une instruction `retourner` est rencontrée dans une fonction, l'exécution de cette fonction s'arrête immédiatement et le contrôle est transféré au point où la fonction a été appelée, avec la valeur spécifiée.
Cela signifie que toute instruction placée *après* un `retourner` inconditionnel dans le même bloc de code ne sera jamais exécutée.
> [!example] Exemple de flux
> ```pseudo-code
> Fonction CalculerEtRetourner(valeur)
> {
> Si valeur > 10 Alors
> retourner valeur * 2
> Fin Si
> // Cette ligne ne sera exécutée que si 'valeur' n'est pas > 10
> retourner valeur + 5
> }
>
> resultat1 = CalculerEtRetourner(15) // retourne 30, la ligne 'retourner valeur + 5' n'est pas exécutée
> resultat2 = CalculerEtRetourner(7) // retourne 12, la ligne 'retourner valeur * 2' n'est pas exécutée
> ```
## 3. Types de Retours
### 3.1. Retour d'une Valeur Unique
C'est le cas le plus courant où une fonction renvoie une seule donnée (nombre, chaîne de caractères, booléen, etc.).
> [!example] Fonction renvoyant un booléen
> ```pseudo-code
> Fonction EstPair(nombre)
> {
> Si nombre MOD 2 == 0 Alors
> retourner Vrai
> Sinon
> retourner Faux
> Fin Si
> }
>
> est_huit_pair = EstPair(8) // est_huit_pair reçoit Vrai
> ```
### 3.2. Retour de Valeurs Multiples
Certains langages de programmation permettent de retourner plusieurs valeurs sous forme d'une structure de données unique (ex: un *tuple* en Python, un *objet* ou un *tableau*).
> [!tip] Astuce pour les retours multiples
> Si votre langage ne supporte pas nativement les retours multiples, vous pouvez encapsuler les valeurs dans un tableau, une liste ou un objet structuré pour les renvoyer en tant qu'une seule entité.
### 3.3. Fonctions sans Retour Explicite
Certaines fonctions n'ont pas besoin de renvoyer une valeur. Leur objectif est d'effectuer une action (un effet de bord), comme afficher un message, modifier une base de données, etc.
> [!definition] Fonction Void (ou Procédure)
> Une fonction *void* (ou *procédure* dans certains contextes) est une fonction qui n'a pas de valeur de retour explicite. Dans certains langages, elle peut utiliser un `retourner` sans argument, ou simplement se terminer sans `retourner`.
> [!example] Fonction sans retour explicite
> ```pseudo-code
> Fonction AfficherMessage(message)
> {
> Ecrire "Le message est : " + message
> // Pas de 'retourner' ici, la fonction se termine après l'affichage
> }
>
> AfficherMessage("Bonjour le monde") // Affiche le message, ne retourne aucune valeur
> ```
Dans de nombreux langages, l'appel à une fonction sans retour explicite se fait sans assignation à une variable.
## 4. Importance et Avantages
Les retours de fonctions sont essentiels pour :
- **Modularité et Réutilisabilité :** Les fonctions peuvent être conçues comme des "boîtes noires" qui prennent des entrées et produisent des sorties, sans dépendre du contexte externe.
- **Clarté du code :** Ils rendent explicite ce qu'une fonction est censée produire, améliorant la lisibilité et la compréhension du code.
- **Facilité de débogage :** Les fonctions qui ne dépendent que de leurs entrées et qui produisent des sorties prévisibles (fonctions pures) sont plus faciles à tester et à déboguer.
- **Composition :** Les valeurs de retour peuvent être utilisées comme entrées pour d'autres fonctions, permettant de construire des chaînes d'opérations complexes.
> [!warning] Attention
> Une fonction devrait idéalement avoir un rôle unique et clair. Si une fonction renvoie une valeur *et* produit de nombreux effets de bord inattendus, elle peut devenir difficile à comprendre et à maintenir.
## Résumé
Les retours de fonctions sont un pilier de l'algorithmique moderne. Ils permettent aux fonctions de communiquer les résultats de leur travail à la partie appelante du programme. Qu'il s'agisse de renvoyer une valeur unique, un agrégat de données, ou de ne rien renvoyer du tout (fonction `void`), la maîtrise de ce concept est cruciale pour concevoir des algorithmes robustes, modulaires et faciles à maintenir. Cette compréhension sera directement applicable lors de l'apprentissage de langages de programmation comme Python, où le mot-clé `return` joue un rôle central.
## 🗓️ Historique
> **Dernière mise à jour :** `26 octobre 2025`
> **Rédigé par :** [[Julien DUQUENNOY]]