Category: fonctions

  • 🤖 Bases de la programmation : Les Fonctions

    Concept

    Le concept de fonction viens de la notation mathématique “f(x)” : pour représenter le resultat d’une modification d’une valeur abstraite “x” par une sérié d’opération (mutiliplication , addition ect … ) . Mais on peut aussi penser aux fonctions comme à des “verbes” dans un language. Certain verbes n’ont pas d’objets comme “dormir” et certain supposent un objet comme “manger qq”.

    On peut aussi voir les fonction comme des “tuyaux” dans lesquelles passent les valeurs du programme afin d’être transformées. Elles ont comme input les “arguments” et comme output une valeur de retour “return”.

    L’utilisation des fonctions n’est pas obligatoires pour qu’un programme fonctionne mais elles améliorent grandement son organisation et sa lisibilité.

    Déclaration

    La définition d’un verbe dans un dictionnaire est très proche d’un code de déclaration de fonction.

    Déclarer une fonction signifie décrire son comportement. C’est son “plan d’action” sous forme de code . Le code contenu entre les balises {} sera exécuté au moment de son “appel”.

    function sayhello() {
       MessageLog.trace("hello")
    }

    Appel

    Pour appeller une fonction et executer son code il suffit d’écrire son nom suivi de parenthèses ()

    
    function sayhello() {
       MessageLog.trace("hello")
    }
    
    sayhello()
    sayhello()
    sayhello()
    
    // affiche 
    // hello
    // hello 
    // hello 

    Fonctions avec argument

    Les fonctions avec argument ont pour but de “faire quelque chose” avec une variable. Au moment de la déclaration on ne connais pas la valeur de la variable qui va être transmise alors on utilise une abstraction. Quelque chose qui peut varier mais dont le contenu est globalement prévisible comme “aliment” ou “fruit” si on veut parler d’une fonction “manger” par exemple.

    Comme dans une définition de dictionnaire où l’on précise qu’un verbe attends une certains catégorie de mots après lui : parler_à(quelqu’un)

    Plus simplement : lorsque l’on défini un argument on défini les “input” de la fonction un peu comme les inports d’un groupe dans la nodeview

    
    function say(_word) {
       MessageLog.trace(_word)
    }
    say("bonjour")
    // affiche : 
    // bonjour
    
    function manger(_aliment) {
       MessageLog.trace(" je mange "+_aliment)
    }
    
    manger("une pomme")
    // affiche : 
    // je mange une pomme 
    
    
    function stand_up_introduction(_word,_city) {
       MessageLog.trace("HEY ")
       MessageLog.trace(_word)
       MessageLog.trace(_city)
       MessageLog.trace("!")
    }
    
    stand_up_introduction("bonjour","toulouse")
    
    // affiche :
    // HEY 
    // bonjour
    // toulouse
    // !
    

    Fonctions avec valeur de retour

    Les fonctions avec valeur de retour vont pouvoir donner une valeur lorsqu’elle sont appelées : Dans cet example la fonction se comporte comme une valeur qu’on transmet à la variable “test”

    function myfunc() {
       return "ma_valeur_de_retour"
    }
    
    var test = myfunc()
    MessageLog.trace(test)
    // affiche ma_valeur_de_retour

    dans la déclaration on décide de la valeur que transmettra la fonction avec le mots clef “return” . C’est l’output de la fonction. Comme dans un groupe dans la nodeview c’est son port out, à la différence qu’une fonction ne peut avoir qu’un seul output.

    On peut biensur “retourner” une variable déclarée dans la fonction

    function myfunc() {
       var msg= "bonjour"
       return msg
    }
    
    var test = myfunc()
    MessageLog.trace(test)
    // affiche bonjour

    Avec les concepts d’argument et de return on peut maintenant écrire des petites fonctions mathématiques simples :

    function additionner(_A,_B) {
       var somme = _A + _B
       return somme
    }
    
    var resultat = additionner(2,2)
    MessageLog.trace(resultat)
    // affiche 4

    Fonctions Imbriquées

    On peut tout à fait appeler une fonction dans une déclaration de fonction

    function ajouter_flammes(_mots){
      return "🔥"+_mots+"🔥"
    }
    
    function dire_un_bonjour_en_feu_a(_prenom){
      var phrase = " bonjour "+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    var test= dire_un_bonjour_en_feu_a("le chat")
    MessageLog.trace(resultat)
    // affiche 🔥 bonjour le chat ! 🔥
    

    on peut également déclarer et appeler une fonction dans une fonction. Lorsque l’on veut décomposer le code d’une fonction complexe par exemple.

    On peut écrire le code ci dessus comme ce ci :

    
    // fonction principale
    function dire_un_bonjour_en_feu_a(_prenom){
      // sous fonction
      function ajouter_flammes(_mots){
        return "🔥"+_mots+"🔥"
      }
      
      var phrase = " bonjour "+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    var test= dire_un_bonjour_en_feu_a("le chat")
    MessageLog.trace(resultat)
    // affiche 🔥 bonjour le chat ! 🔥
    

    Le resultat est le meme. En revanche les autres fonctions n’auront plus acccès à “ajouter flammes” car elle est déclaré à l’interieur de “dir_un_bonjour_en_feu_a”

    Ce code ne fonctionnera pas :

    // fonction principale
    function dire_un_bonjour_en_feu_a(_prenom){
      // sous fonction
      function ajouter_flammes(_mots){
        return "🔥"+_mots+"🔥"
      }
      
      var phrase = " bonjour "+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    // fonction principale
    function dire_un_aurevoir_en_feu_a(_prenom){
      var phrase = " aurevoir"+_prenom+" ! "
      // CETTE FONCTION N'EST PAS VISIBLE D'ICI ! 
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    var test= dire_un_aurevoir_en_feu_a("le chat")
    MessageLog.trace(resultat)
    // affiche une erreur
    

    Pour que “aurevoir” et “bonjour” fonctionnent il faudra replacer “ajouter_flammes” à l’exterieur

    
    function ajouter_flammes(_mots){
      return "🔥"+_mots+"🔥"
    }
      
    
    function dire_un_bonjour_en_feu_a(_prenom){
      var phrase = " bonjour "+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    function dire_un_aurevoir_en_feu_a(_prenom){
      var phrase = " aurevoir"+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    var test= dire_un_aurevoir_en_feu_a("le chat")
    MessageLog.trace(resultat)
    // affiche 🔥 aurevoir le chat ! 🔥
    

    On pourrait encore décomposer nos fonction ainsi :

    function ajouter_char_des_deux_cotes(_mots,_char){
      return _char+_mots+_char
    }
    
    function ajouter_flammes(_mots){
      return ajouter_char_des_deux_cotes(_mots,"🔥")
    }
      
    
    function dire_un_bonjour_en_feu_a(_prenom){
      var phrase = " bonjour "+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    function dire_un_aurevoir_en_feu_a(_prenom){
      var phrase = " aurevoir"+_prenom+" ! "
      phrase = ajouter_flammes(_phrase)
      return phrase
    }
    
    var test= dire_un_aurevoir_en_feu_a("le chat")
    MessageLog.trace(resultat)
    // affiche 🔥 aurevoir le chat ! 🔥