Skip to content

Latest commit

 

History

History
227 lines (144 loc) · 8.08 KB

File metadata and controls

227 lines (144 loc) · 8.08 KB

Les opérateurs rest et spread en JavaScript peuvent être confondus car ils utilisent tous deux les trois points (...), mais ils ont des fonctions différentes en fonction du contexte dans lequel ils sont utilisés.

1. Rest Operator (...) :

L'opérateur rest est utilisé pour collecter plusieurs arguments dans une fonction ou pour regrouper les éléments d'un tableau ou les propriétés d'un objet en un seul.

Usage dans une fonction :

Il permet de regrouper tous les arguments supplémentaires passés à une fonction dans un tableau.

function sum(...numbers) {
  return numbers.reduce((acc, curr) => acc + curr, 0);
}

console.log(sum(1, 2, 3)); // 6

Dans cet exemple, tous les arguments passés à sum sont collectés dans le tableau numbers grâce à l'opérateur rest.

Usage dans la déstructuration d'un tableau :

const animals = ['cat', 'dog', 'mouse', 'lion'];
const [first, ...restAnimals] = animals;

console.log(first); // "cat"
console.log(restAnimals); // ["dog", "mouse", "lion"]
  • Ici, ...restAnimals capture tous les éléments restants du tableau après le premier.

Usage dans la déstructuration d'un objet :

Il permet de capturer les propriétés restantes d'un objet après en avoir extrait certaines.

const person = { name: 'Alice', age: 25, city: 'Paris' };
const { name, ...rest } = person;

console.log(name); // 'Alice'
console.log(rest); // { age: 25, city: 'Paris' }

Ici, name est extrait de l'objet person, et le reste des propriétés (âge et ville) est regroupé dans l'objet rest.


2. **Spread Operator (...) || Spread Syntax ** :

L'opérateur spread || La Spread Syntax est utilisé pour "étaler" ou "décomposer" les éléments d'un tableau ou les propriétés d'un objet dans un autre tableau ou objet.

Contexte principal :

  • Dans les tableaux : Pour copier, fusionner ou ajouter des éléments.
  • Dans les objets : Pour copier ou fusionner des propriétés.
  • Dans les appels de fonction : Pour passer un tableau comme une liste d'arguments.

Usage avec les tableaux :

Il permet de décomposer un tableau en plusieurs éléments distincts.

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];

console.log(arr2); // [1, 2, 3, 4, 5]

Dans cet exemple, le tableau arr1 est décomposé, et ses éléments sont ajoutés individuellement à arr2.

  • copier ou fusionner des tableaux:

    const fruits = ['apple', 'banana'];
    const vegetables = ['carrot', 'potato'];
    const food = [...fruits, ...vegetables];
    
    console.log(food); // ["apple", "banana", "carrot", "potato"]
    • Ici, ...fruits et ...vegetables décomposent leurs éléments dans un nouveau tableau food.
  • Ajouter des éléments à un tableau :

    const numbers = [1, 2, 3];
    const moreNumbers = [...numbers, 4, 5];
    
    console.log(moreNumbers); // [1, 2, 3, 4, 5]

Usage avec les objets :

Il permet de copier ou de fusionner des objets.

const person1 = { name: 'Alice', age: 25 };
const person2 = { ...person1, city: 'Paris' };

console.log(person2); // { name: 'Alice', age: 25, city: 'Paris' }

Ici, les propriétés de person1 sont décomposées et copiées dans person2, avec l'ajout de la propriété city.


Passer un tableau comme arguments d'une fonction :

const numbers = [1, 2, 3];
const sum = (a, b, c) => a + b + c;

console.log(sum(...numbers)); // 6
  • Ici, ...numbers décompose les éléments du tableau en arguments individuels pour la fonction sum.

En résumé :

  • Rest : regroupe plusieurs éléments en un seul (argument dans une fonction, propriétés d'un objet, etc.).
  • Spread : décompose un élément en plusieurs (éléments d'un tableau ou propriétés d'un objet).

Le contexte (fonction ou structure de données) détermine si vous utilisez ... comme opérateur rest ou spread.

"Le contexte détermine si vous utilisez ... comme opérateur rest ou spread" est que la manière dont vous utilisez les trois points (...) change en fonction de la situation dans laquelle vous les placez, et c'est ce contexte qui détermine s'il s'agit de l'opérateur rest ou spread. Voici une explication plus détaillée avec des exemples spécifiques pour clarifier cela :

1. Rest Operator :

  • Il regroupe des éléments en un seul, et il est utilisé dans les définitions de fonctions (pour regrouper les arguments) ou dans les destructurations d'objets ou de tableaux (pour capturer le reste des éléments).

Exemple dans une fonction (opérateur rest) :

Quand vous utilisez ... dans la définition des paramètres d'une fonction, c'est l'opérateur rest.

function sum(...numbers) {
  // Ici, ...numbers regroupe tous les arguments dans un tableau appelé numbers
  return numbers.reduce((acc, curr) => acc + curr, 0);
}

sum(1, 2, 3); // Dans ce contexte, 1, 2, et 3 sont regroupés dans un tableau [1, 2, 3]

Ici, ...numbers regroupe les arguments passés à la fonction dans un seul tableau.

Exemple dans la destructuration d'un objet (opérateur rest) :

Quand vous utilisez ... dans la destructuration d'un objet, il regroupe les propriétés restantes de l'objet.

const person = { name: 'Alice', age: 25, city: 'Paris' };
const { name, ...rest } = person;

// Ici, ...rest regroupe toutes les autres propriétés de l'objet dans un nouvel objet
console.log(rest); // { age: 25, city: 'Paris' }

Ici, ...rest regroupe toutes les autres propriétés restantes dans un objet rest.


2. Spread Operator :

  • Il décompose ou étale des éléments d'un tableau ou d'un objet dans une nouvelle structure. Il est utilisé lorsqu'on appelle une fonction avec des arguments, ou lorsqu'on copie ou fusionne des objets/tables.

Exemple avec un tableau (opérateur spread) :

Quand vous utilisez ... dans le contexte où vous étalez les éléments d'un tableau ou d'un objet, c'est l'opérateur spread.

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
// Ici, ...arr1 étale les éléments de arr1 dans arr2

console.log(arr2); // [1, 2, 3, 4, 5]

Ici, ...arr1 étale les éléments de arr1 dans un nouveau tableau arr2.

Exemple avec un objet (opérateur spread) :

Quand vous utilisez ... pour copier ou fusionner des objets, il étale les propriétés de l'objet source.

const person1 = { name: 'Alice', age: 25 };
const person2 = { ...person1, city: 'Paris' };
// Ici, ...person1 étale les propriétés de person1 dans person2

console.log(person2); // { name: 'Alice', age: 25, city: 'Paris' }

5. Terminologie : Rest et Spread

  • Le terme Rest Operator est officiel et fait partie des spécifications ECMAScript.
  • Le terme Spread Syntax est également officiel et fait partie des spécifications ECMAScript.
  • L'expression Spread Operator est souvent utilisée de manière informelle pour désigner la Spread Syntax, mais elle n'est pas officielle.

6. Résumé rapide :

  1. Rest Operator (...) :

    • Regroupe les éléments restants dans une structure.
    • Exemples :
      • Fonction : function sum(...args) {}.
      • Destructuration : const [a, ...rest] = array.
  2. Spread Syntax (...) :

    • Décompose les éléments d'une structure pour les étendre.
    • Exemples :
      • Tableau : [...array].
      • Objet : { ...object }.
      • Fonction : sum(...array).

C'est le contexte qui détermine si ... est utilisé comme Rest ou Spread !

Conclusion :

  • Rest : Vous utilisez ... dans les paramètres d'une fonction ou dans la destructuration pour regrouper plusieurs éléments.
  • Spread : Vous utilisez ... dans un appel de fonction ou lors de la création/modification de tableaux ou d'objets pour décomposer/étaler les éléments.

C'est le contexte (si vous définissez des paramètres ou copiez des données) qui détermine si ... est utilisé comme opérateur rest ou spread.