Effect-TS fornece ferramentas poderosas para lidar com os tipos Option e Both. Neste artigo, exploraremos várias maneiras de converter e manipular esses tipos usando as funções utilitárias da biblioteca.
A função O.getRight converte um Both em uma Option, descartando o erro. Se qualquer um estiver correto, ele retornará O.some(valor), caso contrário, retornará 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 }
A função O.getLeft converte um Both em uma Option, descartando o valor. Se Both for Left, ele retornará O.some(error), caso contrário, retornará 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') }
A função O.getOrElse retorna o valor dentro da Option se for Some, caso contrário, retorna o valor padrão fornecido.
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) }
A função O.orElse retorna a opção fornecida que se self for None, caso contrário, retorna self. Esta função permite o encadeamento de Opções onde o substituto é outra Opção.
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) }
A função O.orElseSome retorna o valor padrão fornecido agrupado em Some se self for None, caso contrário, retorna self. Esta função permite o encadeamento de opções onde o fallback é um valor padrão agrupado em 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) }
A função O.orElseEither retorna uma Opção contendo um Ou onde Esquerda é da Opção substituta e Direita é da Opção original. Esta função permite o encadeamento de opções onde o substituto fornece um Both para mais contexto.
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) }
A função O.firstSomeOf retorna o primeiro Some encontrado em um iterável de Options. Se todos forem Nenhum, ele retornará Nenhum.
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) }
A função O.toRefinement converte uma função que retorna uma Option em um protetor de tipo, permitindo uma verificação de tipo mais específica.
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) }
A função O.toArray converte uma Option em um array. Se a Opção for Some, ela retorna um array contendo o valor; se for Nenhum, retorna um array vazio.
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) }
Neste artigo, exploramos várias funções fornecidas pelo Effect-TS para converter e manipular os tipos Option e Both. Essas funções melhoram a flexibilidade e a expressividade do seu código, permitindo que você lide com valores opcionais e sujeitos a erros com mais elegância. Se você precisa converter um Both em uma Option, encadear vários valores de Option ou executar operações com segurança de tipo, o Effect-TS oferece um conjunto robusto de ferramentas para simplificar essas tarefas. Ao aproveitar esses utilitários, você pode escrever um código mais limpo e de fácil manutenção que lida com eficácia com a presença ou ausência de valores.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3