Pattern Matching: coincidir / caso

Forja soporta pattern matching con coincidir y caso. Te permite evaluar un valor contra múltiples patrones y desestructurar tipos algebraicos, tuplas y valores literales.

💡 Analogía: Es un si súper-cargado que pregunta “¿esto se ve como...?” en lugar de solo “¿es mayor que 5?”.

Sintaxis básica

📐 Estructura
coincidir (expresión) {
    caso patrón1 → {
        // código si coincide con patrón1
    }
    caso patrón2 → {
        // código si coincide con patrón2
    }
}

Coincidir con valores

El caso más simple: comparar contra valores concretos o rangos:

🔢 Números
variable dia = 3

coincidir (dia) {
    caso 1 → {
        escribir("Lunes")
    }
    caso 2 → {
        escribir("Martes")
    }
    caso 3 → {
        escribir("Miércoles")
    }
    caso _ → {
        escribir("Fin de semana")
    }
}
// → Miércoles

Tipos algebraicos (enums)

Podés desestructurar variantes de un tipo definido con tipo:

📦 Enums
tipo Resultado = Exito(Entero) | Error(Texto)

variable r = Exito(200)

coincidir (r) {
    caso Exito(codigo) → {
        escribir("OK: " + codigo)
    }
    caso Error(msg) → {
        escribir("Falló: " + msg)
    }
}

Patrones múltiples y comodín

Podés combinar patrones con | y usar _ como comodín:

🔀 Pipes y wildcard
coincidir (nota) {
    caso 10 | 9 → {
        escribir("Excelente")
    }
    caso 8 | 7 → {
        escribir("Bueno")
    }
    caso _ → {
        escribir("Reprobar")
    }
}

Equivalencia con Rust

ForjaRust
coincidir (x) { caso ... }match x { ... }
caso 1 → { ... }1 => { ... }
caso _ → { ... }_ => { ... }
caso Algo(n) → { ... }Algo(n) => { ... }
caso 1 | 2 → { ... }1 | 2 => { ... }