Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
March 28, 2024 10:13 pm GMT

Desvendando a Monad Result em JavaScript

Introduo:

Ao desenvolver em JavaScript, frequentemente nos deparamos com situaes em que precisamos lidar com operaes que podem ter sucesso ou falhar. Para facilitar esse cenrio, podemos recorrer monad Result, uma ferramenta poderosa que nos permite lidar com essas situaes de forma elegante e segura. Neste artigo, vamos explorar como criar e usar a classe Result em JavaScript, inspirada no Result do Rust, e entender como ela se encaixa no conceito de monad.

O que a Monad Result?

A monad Result encapsula um valor que pode representar um resultado bem-sucedido ou um erro. como uma caixinha que nos permite tratar operaes que podem falhar de forma mais estruturada e previsvel. Se voc j est familiarizado com o Result em Rust, vai perceber que a ideia bem similar.

Criando a Classe Result em JavaScript:

Vamos dar uma olhada na implementao bsica da classe Result em JavaScript:

class Result {    constructor(value, error) {        this.value = value;        this.error = error;    }    static Ok(value) {        return new Result(value, null);    }    static Err(error) {        return new Result(null, error);    }    map(fn) {        return this.error ? this : new Result(fn(this.value), null);    }    andThen(fn) {        return this.error ? this : fn(this.value);    }    catch(fn) {        return this.error ? fn(this.error) : this;    }    unwrap() {        if (this.error) {            throw new Error(this.error);        }        return this.value;    }}// Definindo uma funo para dividir dois nmerosfunction dividir(a, b) {    // Verificando se o divisor  zero    if (b === 0) {        // Se for, retornamos um Result.Err com uma mensagem de erro        return Result.Err("No  possvel dividir por zero.");    } else {        // Caso contrrio, retornamos um Result.Ok com o resultado da diviso        return Result.Ok(a / b);    }}// Exemplo de uso da funo dividirconst resultadoDivisao = dividir(10, 2)    .map(resultado => resultado * 3) // Multiplicando o resultado por 3    .andThen(resultado => Result.Ok(resultado + 5)) // Adicionando 5 ao resultado    .unwrap(); // Desembrulhando o valor finalconsole.log(resultadoDivisao); // Resultado = 20// Tentativa de dividir por zero, erro propagadoconst resultadoVoid = dividir(10, 0)    .map(resultado => resultado * 3) // No ser executado devido ao erro    .andThen(resultado => Result.Ok(resultado + 5)) // No ser executado devido ao erro// Como no foi feito unwrap, o erro no foi tratado e permanece no objeto Result.console.log(resultadoVoid) // Result { value: null, error: 'No  possvel dividir por zero.' }// Tentativa de dividir por zero, erro propagado e tratado com try-catchtry {    dividir(10, 0)        .map(resultado => resultado * 3) // No ser executado devido ao erro        .andThen(resultado => Result.Ok(resultado + 5)) // No ser executado devido ao erro        .unwrap();} catch (error) {    console.log(error.message); // A mensagem de erro  capturada e exibida: "No  possvel dividir por zero."}// Tentativa de dividir por zero, erro capturado e manipuladoconst resultadoDivisaoPorZero = dividir(10, 0)    .map(resultado => resultado * 3) // No ser executado devido ao erro    .andThen(resultado => Result.Ok(resultado + 5)) // No ser executado devido ao erro    .catch((e) => Result.Err(`Ocorreu um erro: ${e}`)); // O erro  capturado e uma mensagem personalizada  retornadaconsole.log(resultadoDivisaoPorZero); // Result { value: null, error: 'Ocorreu um erro: No  possvel dividir por zero.' }

Concluso:

A monad Result em JavaScript uma ferramenta valiosa para lidar com situaes de sucesso ou falha de forma estruturada e controlada. Ao entender como criar e usar essa classe, podemos escrever cdigo mais robusto e previsvel em nossos projetos.

Se voc quiser saber mais sobre monads e programao funcional, recomendo dar uma olhada nestes links:


Original Link: https://dev.to/joao_neto/desvendando-a-monad-result-em-javascript-31dk

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To