Effect-TS fournit des outils puissants pour gérer les types Option et Any. Dans cet article, nous explorerons différentes façons de convertir et de manipuler ces types à l'aide des fonctions utilitaires de la bibliothèque.
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 }
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') }
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) }
La fonction O.orElse renvoie l'option fournie qui, si self vaut 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) }
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) }
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 d'enchaîner des Options où le repli 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) }
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) }
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<number> => 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) }
La fonction O.toArray convertit une option en tableau. Si l'option est Some, elle renvoie un tableau contenant la valeur ; si c'est Aucun, 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) }
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!