Cookie Consent by Free Privacy Policy Generator 📌 Desvendando a Monad Result em JavaScript

🏠 Team IT Security News

TSecurity.de ist eine Online-Plattform, die sich auf die Bereitstellung von Informationen,alle 15 Minuten neuste Nachrichten, Bildungsressourcen und Dienstleistungen rund um das Thema IT-Sicherheit spezialisiert hat.
Ob es sich um aktuelle Nachrichten, Fachartikel, Blogbeiträge, Webinare, Tutorials, oder Tipps & Tricks handelt, TSecurity.de bietet seinen Nutzern einen umfassenden Überblick über die wichtigsten Aspekte der IT-Sicherheit in einer sich ständig verändernden digitalen Welt.

16.12.2023 - TIP: Wer den Cookie Consent Banner akzeptiert, kann z.B. von Englisch nach Deutsch übersetzen, erst Englisch auswählen dann wieder Deutsch!

Google Android Playstore Download Button für Team IT Security



📚 Desvendando a Monad Result em JavaScript


💡 Newskategorie: Programmierung
🔗 Quelle: dev.to

Introdução:

Ao desenvolver em JavaScript, frequentemente nos deparamos com situações em que precisamos lidar com operações que podem ter sucesso ou falhar. Para facilitar esse cenário, podemos recorrer à monad Result, uma ferramenta poderosa que nos permite lidar com essas situações 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 operações que podem falhar de forma mais estruturada e previsível. 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 implementação básica 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 função para dividir dois números
function 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("Não é possível dividir por zero.");
    } else {
        // Caso contrário, retornamos um Result.Ok com o resultado da divisão
        return Result.Ok(a / b);
    }
}

// Exemplo de uso da função dividir
const 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 final

console.log(resultadoDivisao); // Resultado = 20

// Tentativa de dividir por zero, erro propagado
const resultadoVoid = dividir(10, 0)
    .map(resultado => resultado * 3) // Não será executado devido ao erro
    .andThen(resultado => Result.Ok(resultado + 5)) // Não será executado devido ao erro

// Como não foi feito unwrap, o erro não foi tratado e permanece no objeto Result.
console.log(resultadoVoid) // Result { value: null, error: 'Não é possível dividir por zero.' }

// Tentativa de dividir por zero, erro propagado e tratado com try-catch
try {
    dividir(10, 0)
        .map(resultado => resultado * 3) // Não será executado devido ao erro
        .andThen(resultado => Result.Ok(resultado + 5)) // Não será executado devido ao erro
        .unwrap();
} catch (error) {
    console.log(error.message); // A mensagem de erro é capturada e exibida: "Não é possível dividir por zero."
}

// Tentativa de dividir por zero, erro capturado e manipulado
const resultadoDivisaoPorZero = dividir(10, 0)
    .map(resultado => resultado * 3) // Não será executado devido ao erro
    .andThen(resultado => Result.Ok(resultado + 5)) // Não será executado devido ao erro
    .catch((e) => Result.Err(`Ocorreu um erro: ${e}`)); // O erro é capturado e uma mensagem personalizada é retornada

console.log(resultadoDivisaoPorZero); // Result { value: null, error: 'Ocorreu um erro: Não é possível dividir por zero.' }

Conclusão:

A monad Result em JavaScript é uma ferramenta valiosa para lidar com situações de sucesso ou falha de forma estruturada e controlada. Ao entender como criar e usar essa classe, podemos escrever código mais robusto e previsível em nossos projetos.

Se você quiser saber mais sobre monads e programação funcional, recomendo dar uma olhada nestes links:

...



📌 Desvendando a Monad Result em JavaScript


📈 86.73 Punkte

📌 Functional Containers Summary: Functor vs Applicative vs Monad


📈 31.84 Punkte

📌 Desvendando o Factory Design Pattern


📈 31.84 Punkte

📌 Pythonic Encoding Through Functional Style: Iterable Monad


📈 31.84 Punkte

📌 What is a Monad?


📈 31.84 Punkte

📌 A Armadilha Sutil: Desvendando os Padrões Enganosos ("Deceptive Patterns") na Nossa Vida Digital


📈 31.84 Punkte

📌 Desvendando o UX Writing: A Poesia Oculta nas Interfaces Digitais


📈 31.84 Punkte

📌 FetLife: Able to see highest poll result without voting or view result


📈 31.21 Punkte

📌 How to Find an Object Deeply and Do Something with the Result in JavaScript


📈 23.05 Punkte

📌 Google to Tweak Search Result Algorithm to Favor Sites that Make Content Readily Accessible (August 24, 2016)


📈 15.6 Punkte

📌 Google to Tweak Search Result Algorithm to Favor Sites that Make Content Readily Accessible (August 24, 2016)


📈 15.6 Punkte

📌 Student Result or Employee Database <= 1.6.3 - Auth Bypass


📈 15.6 Punkte

📌 Odd result from the command time.


📈 15.6 Punkte

📌 Cutephp CuteNews 1.3.6 result cross site scripting


📈 15.6 Punkte

📌 Nabocorp Nabopoll 1.2 result.php surv sql injection


📈 15.6 Punkte

📌 Bill Nye Explains That the Flooding In Louisiana Is the Result of Climate Change


📈 15.6 Punkte

📌 Faulty Metrics in Twitter Android App Result in Refunds for Advertisers


📈 15.6 Punkte

📌 Jbmc Software DirectAdmin 1.293 RESULT cross site scripting


📈 15.6 Punkte

📌 Simpel Side Weblosninger 1/2/3/4 result.php search cross site scripting


📈 15.6 Punkte

📌 TED Event: How Industry 4.0 Promises to Result in Amazing CX


📈 15.6 Punkte

📌 CyberBuild result.asp cross site scripting


📈 15.6 Punkte

📌 53% of DDoS Attacks Result In Additional Compromise, Says Neustar


📈 15.6 Punkte

📌 Bill Nye Explains That the Flooding In Louisiana Is the Result of Climate Change


📈 15.6 Punkte

📌 Quora Discloses Data Breach, Doubts It Will Result in Identity Theft


📈 15.6 Punkte

📌 Proposed Draft of Chrome Extension Manifest V3 could result in the end of uBlock Origin and uMatrix for Chromium


📈 15.6 Punkte

📌 53% of DDoS Attacks Result In Additional Compromise, Says Neustar


📈 15.6 Punkte

📌 Faulty Metrics in Twitter Android App Result in Refunds for Advertisers


📈 15.6 Punkte

📌 Google's Top Search Result For 'Target' Was A Tech Support Scam


📈 15.6 Punkte

📌 MailStore Server bis 10.0.1 /search-result/ c-f/c-q/c-from/c-to Cross Site Scripting


📈 15.6 Punkte

📌 Uber Study Says Self-Driving Trucks Will Result In More Truck Drivers, Not Less


📈 15.6 Punkte

📌 Simple Student Result Plugin bis 1.6.3 auf WordPress functions.php fn_ssr_add_st_submit() schwache Authentisierung


📈 15.6 Punkte

📌 Cryptojacking: the result of the “cryptocurrency rush”


📈 15.6 Punkte











matomo