Partage
  • Partager sur Facebook
  • Partager sur Twitter

Questions sur le cours - Travaillez les fonctions

Sujet résolu
    28 novembre 2021 à 13:20:38

    Bonjour à tous,

    Grand débutant en JS, je suis en train de suivre le cours sur les fonctions.

    https://openclassrooms.com/fr/courses/6175841-apprenez-a-programmer-avec-javascript/6279223-travaillez-sur-les-fonctions

    J'ai qlq questions sur le CodePen de la solution :

    https://codepen.io/nicolaspatschkowski/pen/MWwxpvg

    D'abord, la première ligne est la suivante :

    const calculateAverageRating = (ratings) => {
    
    }

    Ici, on déclare une constante qui équivaut à l'array ratings?

    Et, seconde question, où le tableau ratings est-il déclaré? Étant donné qu'on le parcoure durant toute la suite de l'exercice. Vous l'aurez compris, je suis un peu perdu ahah

    Merci à ceux qui prendront le temps d'éclairer ma lanterne!

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2021 à 16:36:56

      Non, ceci est la définition d'une fonction. Enfin, c'est l'une des manière de déclarer une fonction.

      Il y a la manière "à l'ancienne" :

      var maFonction = function(argument) {
         console.log(argument);
      }

      Mais ça, c'est ce que j'ai apppris à l'époque ou les mots-clés "let" et "const" n'existaient pas. Je te laisse faire les recherches sur ces mot-clés, je ne saurais pas expliquer super bien, mais ils sont plus adaptés que "var", dont l'usage est déconseillé aujourd'hui.
      M'enfin, le principe reste le même, on déclare une variable "maFonction, et on lui affecte une fonction en utilisant le mot-clé function. Ensuite, entre parenthèses il y a le ou les arguments. Ou pas, mais même si il n'y a pas d'arguments, il faut mettre les parenthèses.

      Il y a aussi cette manière là :

      function maFonction(argument) {
         console.log(argument;
      }


      Alors, pareil, j'imagine qu'il y a une subtilité, mais je n'ai pas une connaissance assez poussée en programmation pour la connaître.

      Et enfin, il y a ce qu'on appelle les "fonction fléchées", qui sont une manière abrégée de déclarer les fonctions. Et là pareil, il y a des subtilités, mais que je ne connais pas bien et que je ne saurais pas expliquer. Mais dans l'exemple que tu donne on a affaire à une fonction fléchée.
      Donc on déclare une variable, mais ici avec le mot-clé const ( ce qui, si je ne dis pas de bêtise, empêche qu'un puisse réaffecter autre chose au nom "calculateAverageRating" ).
      Puis, à la place du mot-clé function ( qui disparaît ) tu as directement les parenthèses ( facultatives si tu a un et un seul argument ), suivies de la "fléche" ( qui d'une certaine manière remplace le mot-clé function ) et enfin le bloc d'instruction.

      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2021 à 11:38:52

        Bonjour, la différence entre let et var se situe uniquement au niveau de la portée de la variable qui et déclarée (let étant plus récent on le préconise tant que c'est possible).

        La durée de vie d'une variable déclaré avec let s'arrête à la fin du block dans le quel on là déclaré (une fonction, une boucle, une structure conditionnel...) une variable définit avec var continue du vivre en dehors de sont block de déclaration.

        Tu veut voir cet article en français sur les différentes façon de déclaré une variables avec Javascript et leurs caractéristique plus en détails.

        Pour les fonctions ces 2 déclarations me semble équivalente:

        var maFonction = function(argument) {
            console.log(argument);
        }
        
        function maFonction(argument) {
            console.log(argument);    
        }
        

        Par contre il y à une subtilité pour les fonctions fléchées qui et relativement souvent ignorées et qui peut être source d'erreur,

        ces que les fonctions fléchées ne redéfinissent pas les identifiants de la fonction

        Ce que contient les identifiants d'une fonction ces la variable implicite this la variables implicite arguments.

        Dans certains cas (des cas de callbacks notamment) this et redéfinie dans ta fonction pour faire référence à un objet si tu utilise une fonction fléché tu n'y aura pas accès this conserveras ça valeur précédente le cas le plus commun doit être celui des événement.

        document.querySelector('button').addEventlistener('click', function(event) {
        
            console.log(this); // <- HTMLButtonElement
            console.log(this === event.target); // <- true
        
        });
        
        document.querySelector('button').addEventlistener('click', (event) => {
            console.log(this); // <- Window | undefined (l'objet par défaut où undefined en mode strict)
            console.log(this === event.target); // <- false
        });
        Par exemple il à une façon de définir une class en javascript qui utilise la syntaxe des fonction et qui se sert du corps de la fonction comme constructeur:
        const Foobar = function() {
        
            this.attribute = 42;
            this.otherAttribute = 42.1;
        }
        
        const f = new Foobar();
        
        console.log(f); // <- Foobar {attribute: 42, otherAttribute: 42.1}

        Mais cela ne marchera pas avec une fonction fléchée qui ne peut pas être utilisé en tant que constructeur:

        const Foobar = () => {
        
            this.attribute = 42;
            this.otherAttribute = 42.1;
        }
        
        const f = new Foobar();
        
        console.log(f); // <- Uncaught TypeError: Foobar is not a constructor







        -
        Edité par SamuelGaborieau3 29 novembre 2021 à 11:41:08

        • Partager sur Facebook
        • Partager sur Twitter

        suggestion de présentation.

          1 décembre 2021 à 11:18:24

          Merci à vous deux pour vos réponses, c'est beaucoup plus clair!
          • Partager sur Facebook
          • Partager sur Twitter

          Questions sur le cours - Travaillez les fonctions

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown