Skip to content
On this page

Comment utiliser expand sur RxJS ?

Pour utiliser la fonction expand de RxJS, vous devez d'abord importer le module rxjs dans votre application. Vous pouvez ensuite utiliser la fonction expand en la passant en tant que paramètre à la méthode pipe d'un observable. La fonction expand prend un argument de type fonction, qui définit comment les valeurs générées par l'observable sont étendues. Voici un exemple simple montrant comment utiliser la fonction expand :

js
import { of, expand } from 'rxjs';

const source = of(1, 2, 3);
const result = source.pipe(
  expand(val => {
    return of(val + 1, val + 2);
  })
);

result.subscribe(x => console.log(x));
// Output: 1, 2, 3, 4, 5, 6

Dans cet exemple, l'observable source génère trois valeurs : 1, 2 et 3. La fonction passée à expand prend chacune de ces valeurs en entrée et génère deux nouvelles valeurs : la valeur d'origine augmentée de 1 et la valeur d'origine augmentée de 2. Le résultat final est un observable qui génère toutes les valeurs générées par source ainsi que toutes les valeurs générées par la fonction passée à expand.

Intéret ?

La fonction expand de RxJS peut être utile lorsque vous souhaitez étendre les valeurs générées par un observable en générant des valeurs supplémentaires à partir de ces valeurs d'origine. Par exemple, si vous souhaitez générer une suite de nombres en partant d'un nombre initial et en ajoutant un certain nombre à chaque étape, vous pouvez utiliser la fonction expand pour générer cette suite de nombres en boucle, en utilisant la valeur précédente pour calculer la valeur suivante.

En utilisant la fonction expand, vous pouvez également facilement implémenter des algorithmes récursifs en utilisant des observables. Cela peut être particulièrement utile lorsque vous souhaitez traiter des données en parallèle ou lorsque vous souhaitez gérer de manière efficace les données de grande taille.

Voici un exemple concret montrant comment utiliser la fonction expand pour implémenter un algorithme récursif en utilisant des observables :

js
import { of, expand } from 'rxjs';

// Fonction récursive pour calculer la factorielle d'un nombre
function factorial(n) {
  if (n === 0) {
    return of(1);
  } else {
    return of(n).pipe(
      expand(val => factorial(val - 1).pipe(map(f => f * val)))
    );
  }
}

const result = factorial(5);
result.subscribe(x => console.log(x));
// Output: 120 (5! = 5 * 4 * 3 * 2 * 1 = 120)

Dans cet exemple, la fonction factorial utilise la fonction expand pour implémenter un algorithme récursif qui calcule la factorielle d'un nombre. L'observable généré par la fonction factorial génère les valeurs intermédiaires du calcul de la factorielle en utilisant la fonction expand, ce qui permet d'éviter d'avoir à utiliser une boucle for ou une boucle while pour effectuer le calcul de manière itérative.