Archives Wild Code School
JavaScript

đŸ‘©â€đŸ« JS Basics 06 - Les fonctions

QuĂȘte 6 sur 11 · 5 images archivĂ©es

Objectifs

  • Écrire et exĂ©cuter des fonctions en JS
  • Éviter de te rĂ©pĂ©ter (D.R.Y : Don't Repeat Yourself)

Pré-requis

Avoir validĂ© les quĂȘtes suivantes :

Introduction

Dans les quĂȘtes prĂ©cĂ©dentes, tu as dĂ©couvert ce qu'est JavaScript et Ă  quoi ressemble la syntaxe. Tu as Ă©galement appris Ă  crĂ©er des variables, manipuler diffĂ©rents types de donnĂ©es et Ă©crire des conditions. Cette quĂȘte va introduire le (vaste) sujet des fonctions en Javascript.

Voici un des grands principes du développement :

Le récit

ÉVITE DE TE RÉPÉTER (D.R.Y : Don't Repeat Yourself)

This Is Not The DRY You Are Looking For | by NicolĂČ Pignatelli ...

Cela signifie que tu ne devrais pas Ă©crire un bout de code qui fait sensiblement la mĂȘme chose Ă  plusieurs endroits diffĂ©rents.

Une façon d'éviter de se répéter est de créer des fonctions. Ce sont des blocs de code que l'on peut exécuter autant de fois que l'on veut, sans avoir à réécrire les instructions systématiquement.

En fait, tu as dĂ©jĂ  utilisĂ© des fonctions. Rappelle-toi des quĂȘtes prĂ©cĂ©dentes avec console.log et prompt ! Maintenant, il est temps d'apprendre Ă  crĂ©er tes propres fonctions.

C'est parti !

Function photo

Sommaire

Créer une fonction

Lego

Pour déclarer une fonction, tu peux utiliser le mot clé function suivi du nom de la fonction.

javascript
function helloWorld (){
  console.log("Hello,");
  console.log("World!");
}

Pour appeler (exécuter/invoquer) la fonction, tu dois écrire son nom suivi par des parenthÚses :

javascript
helloWorld();
replit
https://replit.com/@LonardFlachs/BoilingYellowgreenLegacy
Info

Clique sur le bouton "play" pour exĂ©cuter le code. Tu peux Ă©galement modifier le code pour tester les choses par toi-mĂȘme :)

ParamĂštres/Arguments d'une fonction

Une fonction peut accepter un ou plusieurs paramĂštres.

Les paramÚtres sont des données que la fonction va prendre en entrée. Ces données seront donc disponibles dans le contexte de la fonction afin que cette derniÚre puisse les manipuler.

Voici un exemple :

image

Dans cet exemple, on a créé une fonction nommée sayHello qui accepte une donnée nommée name en paramÚtre.

Tu peux assigner une valeur à un paramÚtre entre les parenthÚses quand tu appelles la fonction. Tu dois différencier le paramÚtre (la variable name) et l'argument (la valeur "Bob").

Tu es libre de donner le nom que tu souhaites au paramĂštre : name, firstName ou quelque chose d'autre.

Attention

Attention : Fais tout de mĂȘme en sorte que ce nom soit suffisamment explicite pour que toi et les autres compreniez directement ce que reprĂ©sente la donnĂ©e.

🔬 Fais une expĂ©rience

Voici maintenant un exemple d'une fonction qui accepte plusieurs paramĂštres :

replit
https://repl.it/@LonardFlachs/SingleSpatialBlogclient
Info

Clique sur le bouton "play" pour exĂ©cuter le code. Tu dois Ă©galement modifier le code pour tester les choses par toi-mĂȘme :)

Essaie d'appeler la fonction plusieurs fois avec des paramÚtres différents pour voir ce qu'il se passe.

ParamÚtre par défaut

Tu peux définir des valeurs par défaut pour les paramÚtres de tes fonctions.

De cette façon, si aucun argument n'est donné à la fonction lors de son appel, une valeur par défaut sera utilisée. C'est un bon moyen de se protéger des erreurs.

javascript
function sayHello(name = "World") {
  console.log(`Hello, ${name}!`);
}

sayHello();
// Hello, World!

sayHello("Bob");
// Hello, Bob!

Return

Tu viens de voir que les paramÚtres d'une fonction représentent ses entrées. Mais une fonction peut également produire une sortie qu'on appelle valeur de retour.

replit
https://repl.it/@LonardFlachs/YellowishMeanLocations
Info

Clique sur le bouton "play" pour exĂ©cuter le code. Tu peux Ă©galement modifier le code pour tester les choses par toi-mĂȘme :)

Dans ce code, on a créé une fonction pour calculer la somme de deux nombres. Cette derniĂšre accepte en paramĂštres les nombres Ă  additionner : a et b. La somme a + b est renvoyĂ©e Ă  l'endroit oĂč on a appelĂ© la fonction grĂące au mot-clĂ© return. Maintenant, que se passe-t-il exactement Ă  la ligne 4 ? On appelle la fonction sum avec les arguments 1 et 2. Le code de la fonction est exĂ©cutĂ© et renvoie la valeur 3 au code appelant Ă  la ligne 4. Une fois exĂ©cutĂ©e, l'interprĂ©teur Javascript va substituer l'expression correspondante Ă  l'appel de la fonction par sa valeur de retour une fois exĂ©cutĂ©e. À ce moment lĂ , tout se passe donc comme si on avait console.log(3) au lieu de console.log(sum(1, 2)).

Il n'est pas obligatoire de toujours spécifier une valeur de retour.

Si rien n'est spécifié, la fonction renverra undefined par défaut.

Attention

L'utilisation du mot-clé "return" stoppe immédiatement l'exécution de la fonction pour revenir au code appelant. Les lignes de code aprÚs un return ne seront donc jamais prises en compte.

javascript
function sum(a, b){
  return a + b;
  console.log(a + b); // This code will never be run
}
sum(1, 2);

Voyons maintenant un exemple un peu plus complexe :

replit
https://repl.it/@LonardFlachs/StunningChiefButtons
Info

Clique sur le bouton "play" pour exĂ©cuter le code. Tu peux Ă©galement modifier le code pour tester les choses par toi-mĂȘme :)

Dans ce code, tu vois une fonction login qui accepte deux paramÚtres : name (l'identifiant de l'utilisateur) et password (son mot de passe). Cette fonction va retourner true ou bien false selon la validité des informations de connexion fournies en paramÚtres.

Pour tester la fonction, tu vois 2 variables userName et userPassword qui seront initialisées par l'utilisateur, via prompt.

Le code vérifie ensuite si la valeur de retour de la fonction login appelée avec les arguments userName et userPassword est true. Si c'est le cas, on affiche "Welcome !", sinon on affiche "Wrong credentials...".

Portée (scope) / Contexte

En Javascript, dÚs que l'on écrit du code, le contexte est trÚs important. Tu ne peux pas utiliser une variable déclarée dans une fonction en dehors de cette fonction.

javascript
function sayMyName() {
  const name = "Pierre"
  console.log(name)
  // works fine within the context of the function
}

function sayMyFullName() {
  const lastName = 'Gerard'
  console.log(lastName + ' ' + name)
  // wont work: name is declared in an other function
}

console.log(lastName + ' ' + name)
// wont work either: lastname and name only exists inside their functions

Par exemple, ici la variable name sera disponible uniquement dans le contexte de sayMyName, pas dans le contexte global.

La fonction s'exécutera donc dans son propre contexte et aura son propre espace mémoire.

Sachant tout cela, nous pouvons créer et appeler des fonctions dans nos projets, mais nous devons tenir compte du contexte.

Fonctions fléchées

image

Les fonctions fléchées sont une autre façon de créer des fonctions. Voici à quoi ressemble la syntaxe :

javascript
const myFunction = (arg1, arg2) => {
  // Code goes here
};

🔬 ExpĂ©rience

Transforme cette fonction en une fonction fléchée

codesandbox
https://codesandbox.io/s/bind-example-forked-fpty0?fontsize=14&hidenavigation=1&module=%2Fsrc%2Findex.js&theme=dark
Voir la solution
javascript
const sayHello = (name) => {
  return `Hello, ${name}`;
};

console.log(sayHello("Bob"));

Lorsque tu utilises les fonctions fléchées, tu peux rendre le code encore plus court.

Si tu n'utilises pas les accolades aprĂšs la flĂšche, alors ce qui sera aprĂšs la flĂšche sera la valeur de retour (return) de la fonction.

javascript
function sum(a, b) {
  return a + b
}

// equivalent to
const sum = (a, b) => { return a + b };

// also equivalent to
const sum = (a, b) => a + b;

Ressources

↗
MDN - functions in JavaScript

La section "fonction" de la documentation officielle MDN, une référence !

developer.mozilla.org
↗
Codeburst.io - JavaScript Functions — Understanding The Basics

Un article super qui explique ce que sont les fonctions en Javascript

codeburst.io

Une vidéo géniale sur les fonctions :

▶
Vidéo YouTube
https://www.youtube.com/watch?v=N8ap4k_1QEQ

Ressources partagĂ©es sur cette quĂȘte