# Fonctions > [!video] Vidéo explicative > <iframe width="560" height="315" src="https://www.youtube.com/embed/VO0OqsH0M3U?si=pJkSEvNhUFYBIrex" 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> ## Introduction Dans le domaine de l'algorithmique, la capacité à structurer et organiser le code est primordiale pour résoudre des problèmes complexes. Les fonctions représentent un pilier de cette organisation, permettant de décomposer un problème en sous-problèmes plus petits et gérables. L'introduction des fonctions marque une étape vers la modularité et la réutilisabilité du code. Elles transforment des séquences d'instructions répétitives ou spécifiques en blocs autonomes, facilitant ainsi la conception, la lecture et la maintenance des algorithmes. ## 1. Définition et Rôle > [!definition] Définition > Une **fonction** (ou procédure, sous-programme, routine) est un bloc de code autonome qui effectue une tâche spécifique et peut être appelé à tout moment depuis d'autres parties du programme. Elle peut prendre des **paramètres** en entrée et/ou retourner une **valeur** en sortie. Les fonctions jouent plusieurs rôles essentiels : - **Abstraction** : Elles masquent la complexité interne d'une tâche, ne présentant que son interface (ce qu'elle fait, pas comment elle le fait). - **Réutilisabilité** : Une fois définie, une fonction peut être appelée plusieurs fois sans avoir à réécrire le même code. - **Modularité** : Elles permettent de découper un grand problème en petites unités logiques et indépendantes. - **Maintenance** : Les modifications ou corrections ne concernent qu'un seul bloc de code, réduisant les risques d'introduire des erreurs ailleurs. ## 2. Structure d'une Fonction Une fonction est typiquement composée des éléments suivants : 1. **Nom de la fonction** : Un identifiant unique qui permet de l'appeler. 2. **Paramètres (ou arguments)** : Des valeurs passées à la fonction lors de son appel. Ils agissent comme des variables locales initialisées avec les valeurs fournies. Une fonction peut avoir zéro, un ou plusieurs paramètres. 3. **Corps de la fonction** : L'ensemble des instructions exécutées lorsque la fonction est appelée. 4. **Valeur de retour** : La valeur que la fonction renvoie à l'appelant une fois son exécution terminée. Toutes les fonctions ne retournent pas nécessairement une valeur (on parle alors parfois de *procédures* dans certains langages). > [!note] Procédure vs Fonction > Historiquement, une **procédure** est un sous-programme qui ne retourne pas de valeur explicite (elle effectue une action), tandis qu'une **fonction** retourne une valeur. Dans de nombreux langages modernes (comme Python), cette distinction tend à s'estomper, toutes étant appelées "fonctions", même celles qui retournent implicitement une valeur nulle. ## 3. Signature d'une Fonction La **signature** d'une fonction est son identité. Elle inclut généralement son nom, le nombre et le type de ses paramètres, et le type de sa valeur de retour. > [!example] Exemple de signature en pseudo-code > ``` > FONCTION NomDeLaFonction(parametre1: Type1, parametre2: Type2) -> TypeDeRetour > { > // Corps de la fonction > } > ``` > [!example] Exemple simple : Calcul de la somme de deux nombres > ``` > FONCTION Additionner(nombre1: ENTIER, nombre2: ENTIER) -> ENTIER > { > resultat: ENTIER > resultat = nombre1 + nombre2 > RETOURNER resultat > } > > // Appel de la fonction > a: ENTIER = 5 > b: ENTIER = 3 > somme: ENTIER > somme = Additionner(a, b) // somme vaudra 8 > ``` ## Résumé Les fonctions sont un concept fondamental en programmation, permettant de structurer les algorithmes en blocs réutilisables et modulaires. Elles améliorent la lisibilité, la maintenabilité et l'efficacité du code en décomposant les problèmes complexes. Comprendre leur structure, le rôle des paramètres et des valeurs de retour, ainsi que la portée des variables, est essentiel pour concevoir des algorithmes robustes et bien organisés. Ces principes seront directement applicables lors de l'apprentissage de langages de programmation comme Python. ## 🗓️ Historique > **Dernière mise à jour :** `26 octobre 2025` > **Rédigé par :** [[Julien DUQUENNOY]]