Learn
← Previous Next →

Hari 28: Functional Programming Lanjutan

60 min Last updated 09 Apr 2026

Functor, Monad & Either Pattern

// Maybe Monad — menangani null/undefined dengan aman
class Maybe {
    constructor(value) { this._value = value; }
    static of(value) { return new Maybe(value); }
    isNothing() { return this._value === null || this._value === undefined; }
    map(fn) { return this.isNothing() ? this : Maybe.of(fn(this._value)); }
    getOrElse(defaultVal) { return this.isNothing() ? defaultVal : this._value; }
    toString() { return this.isNothing() ? "Nothing" : `Just(${this._value})`; }
}

// Gunakan tanpa khawatir null
const nama = Maybe.of(null)
    .map(s => s.trim())
    .map(s => s.toUpperCase())
    .getOrElse("TAMU");
console.log(nama); // "TAMU"

const email = Maybe.of("  budi@example.com  ")
    .map(s => s.trim())
    .map(s => s.toLowerCase())
    .getOrElse("unknown");
console.log(email); // "budi@example.com"

💡 Notice: Either monad memisahkan alur sukses (Right) dan gagal (Left). map() hanya dieksekusi pada Right. Pattern ini populer di functional programming.

Assignment

Implementasi Either monad untuk penanganan error functional. Right(value) untuk sukses, Left(error) untuk gagal. Gunakan untuk validasi email.

Expected output:

✓ budi@example.com
✗ Error: Format tidak valid
✗ Error: Email kosong
JS script.js
Solution
Output