"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Explorer les conversions d'options dans Effect-TS

Explorer les conversions d'options dans Effect-TS

Publié le 2024-07-30
Parcourir:738

Exploring Option Conversions in Effect-TS

Effect-TS fournit des outils puissants pour gérer les types Option et Any. Dans cet article, nous explorerons différentes manières de convertir et de manipuler ces types à l'aide des fonctions utilitaires de la bibliothèque.

Exemple 1 : convertir un soit en option avec O.getRight

La fonction O.getRight convertit un Soit en Option, supprimant l'erreur. Si l'un ou l'autre a raison, il renvoie O.some(value), sinon il renvoie O.none.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex01() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getRight(eitherRight)); // Output: Some('ok')
  console.log(O.getRight(eitherLeft)); // Output: None
}

Exemple 2 : Convertir un Soit en une Option avec O.getLeft

La fonction O.getLeft convertit un Soit en Option, en supprimant la valeur. Si l'un ou l'autre est à gauche, il renvoie O.some (erreur), sinon il renvoie O.none.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex02() {
  const eitherRight = E.right('ok'); // Create an Either containing the value 'ok'
  const eitherLeft = E.left('error'); // Create an Either representing an error

  console.log(O.getLeft(eitherRight)); // Output: None
  console.log(O.getLeft(eitherLeft)); // Output: Some('error')
}

Exemple 3 : obtenir la valeur ou la valeur par défaut avec O.getOrElse

La fonction O.getOrElse renvoie la valeur à l'intérieur de l'option si elle est Some, sinon elle renvoie la valeur par défaut fournie.

import { Option as O, pipe } from 'effect';

function conversions_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.getOrElse(() => 'default')
    )
  ); // Output: 1 (since some contains 1)
  console.log(
    pipe(
      none,
      O.getOrElse(() => 'default')
    )
  ); // Output: 'default' (since none is None)
}

Exemple 4 : chaînage d'options avec O.orElse

La fonction O.orElse renvoie l'option fournie qui, si self est None, sinon elle renvoie self. Cette fonction permet d'enchaîner des options où la solution de repli est une autre option.

import { Option as O, pipe } from 'effect';

function conversions_ex04() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElse(() => some2)
    )
  ); // Output: Some(1) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElse(() => some2)
    )
  ); // Output: Some(2) (since none is None and fallback is some2)
}

Exemple 5 : Retour à une valeur par défaut avec O.orElseSome

La fonction O.orElseSome renvoie la valeur par défaut fournie enveloppée dans Some si self vaut None, sinon elle renvoie self. Cette fonction permet le chaînage d'options où la solution de repli est une valeur par défaut enveloppée dans Some.

import { Option as O, pipe } from 'effect';

function conversions_ex05() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(1) (since some contains 1)
  console.log(
    pipe(
      none,
      O.orElseSome(() => 2)
    )
  ); // Output: Some(2) (since none is None and fallback is 2)
}

Exemple 6 : chaînage d'options avec l'un ou l'autre contexte à l'aide de O.orElseEither

La fonction O.orElseEither renvoie une option contenant un soit où Left provient de l'option de secours et Right provient de l'option d'origine. Cette fonction permet le chaînage d'options où la solution de secours fournit un Soit pour plus de contexte.

import { Option as O, Either as E, pipe } from 'effect';

function conversions_ex06() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(
    pipe(
      some1,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Right(1)) (since some1 contains 1)
  console.log(
    pipe(
      none,
      O.orElseEither(() => some2)
    )
  ); // Output: Some(Left(2)) (since none is None and fallback is some2)
}

Exemple 7 : Trouver le premier Some dans un itérable avec O.firstSomeOf

La fonction O.firstSomeOf renvoie le premier Some trouvé dans un itérable d'Options. Si tous valent Aucun, il renvoie Aucun.

import { Option as O } from 'effect';

function conversions_ex07() {
  const options = [O.none(), O.some(1), O.some(2)]; // Create an iterable of Options
  const optionsAllNone = [O.none(), O.none()]; // Create an iterable of None Options

  console.log(O.firstSomeOf(options)); // Output: Some(1) (since the first non-None Option is Some(1))
  console.log(O.firstSomeOf(optionsAllNone)); // Output: None (since all Options are None)
}

Exemple 8 : Convertir une fonction renvoyant une option en type Guard avec O.toRefinement

La fonction O.toRefinement convertit une fonction renvoyant une option en garde de type, permettant une vérification de type plus spécifique.

import { Option as O } from 'effect';

function conversions_ex08() {
  const isPositive = (n: number): O.Option => n > 0 ? O.some(n) : O.none();
  const isPositiveRefinement = O.toRefinement(isPositive);

  console.log(isPositiveRefinement(1)); // Output: true (since 1 is positive)
  console.log(isPositiveRefinement(-1)); // Output: false (since -1 is not positive)
}

Exemple 9 : Convertir une option en tableau avec O.toArray

La fonction O.toArray convertit une option en tableau. Si l'option est Some, elle renvoie un tableau contenant la valeur ; si c'est None, il renvoie un tableau vide.

import { Option as O } from 'effect';

function conversions_ex09() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value

  console.log(O.toArray(some)); // Output: [1] (since some contains 1)
  console.log(O.toArray(none)); // Output: [] (since none is None)
}

Conclusion

Dans cet article, nous avons exploré diverses fonctions fournies par Effect-TS pour convertir et manipuler les types Option et Each. Ces fonctions améliorent la flexibilité et l'expressivité de votre code, vous permettant de gérer plus gracieusement les valeurs facultatives et sujettes aux erreurs. Que vous ayez besoin de convertir un Soit en Option, d'enchaîner plusieurs valeurs d'option ou d'effectuer des opérations de type sécurisé, Effect-TS propose un ensemble d'outils robustes pour simplifier ces tâches. En tirant parti de ces utilitaires, vous pouvez écrire un code plus propre et plus maintenable qui gère efficacement la présence ou l'absence de valeurs.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/almaclaine/exploring-option-conversions-in-effect-ts-3bpk?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3