"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Explorando conversões de opções em Effect-TS

Explorando conversões de opções em Effect-TS

Publicado em 30/07/2024
Navegar:992

Exploring Option Conversions in Effect-TS

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.

Exemplo 1: Converter um dos dois em uma opção com O.getRight

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
}

Exemplo 2: Converter um dos dois em uma opção com O.getLeft

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')
}

Exemplo 3: Obtenha valor ou padrão com O.getOrElse

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)
}

Exemplo 4: opções de encadeamento com O.orElse

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)
}

Exemplo 5: Fallback para um valor padrão com O.orElseSome

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)
}

Exemplo 6: Opções de encadeamento com qualquer contexto usando O.orElseEither

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)
}

Exemplo 7: Encontre o primeiro Some em um Iterable com O.firstSomeOf

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)
}

Exemplo 8: Converter uma função que retorna uma opção para um Type Guard com O.toRefinement

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)
}

Exemplo 9: Converter uma opção em um array com O.toArray

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)
}

Conclusão

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.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/almaclaine/exploring-option-conversions-in-effect-ts-3bpk?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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