Módulo resultado — Tipos Option y Result

Archivo: stdlib/std/resultado.fa

¿Por qué existe?

Proporciona utilidades para trabajar con los tipos algebraicos fundamentales de Forja: Opcion (Option — Alguno/None) y Resultado (Result — Ok/Error). Estos tipos son la columna vertebral del manejo de errores y valores opcionales en Forja.

📝 Cambio de semántica: En versiones recientes de Forja, los constructores de Opcion aceptan tanto la forma inglesa como la española: Alguno(valor) / Algo(valor) / Some(valor) para some, y Ninguno() / None() para none. La sintaxis recomendada es usar Alguno y Ninguno.

Constructores

TipoConstructoresDescripción
OpcionAlguno(valor), Algo(valor), Some(valor)Representa la presencia de un valor
OpcionNinguno(), None()Representa la ausencia de valor
ResultadoOk(valor)Representa una operación exitosa
ResultadoError(mensaje), Err(mensaje)Representa un error con mensaje

Funciones principales

FunciónDescripción
es_alguno(opcion)Retorna verdadero si la opción es Alguno/Some
es_ninguno(opcion)Retorna verdadero si es Ninguno/None
es_ok(resultado)Retorna verdadero si es Ok
es_error(resultado)Retorna verdadero si es Error
obtener_o_sino(opcion, default)Extrae el valor o retorna un default (unwrap_or)
obtener_o_ninguno(opcion)Extrae el valor o retorna Ninguno
mapear(opcion, fn)Aplica una función al valor interno si existe (map)
a_resultado(opcion, mensaje_error)Convierte Opcion a Resultado (ok_or)
resultado_ok(resultado)Extrae el valor Ok o lanza error
resultado_error(resultado)Extrae el mensaje de error

Uso con pattern matching

La forma más común de trabajar con estos tipos es usando coincidir:

📄 manejo_opcion.fa
variable usuario_opt = env.obtener("USER")
coincidir (usuario_opt) &brace;
    caso Alguno(v) -> &brace;
        escribir_linea("Usuario: " + v)
    }
    caso Ninguno -> &brace;
        escribir_linea("Usuario: desconocido")
    }
}

// Para Resultado:
variable archivo = archivo_leer("datos.txt")
coincidir (archivo) &brace;
    caso Ok(contenido) -> &brace;
        escribir_linea("Contenido: " + contenido)
    }
    caso Error(msg) -> &brace;
        escribir_linea("Error: " + msg)
    }
}

Casos de uso

💡 Filosofía: Forja promueve el manejo explícito de errores mediante tipos algebraicos en lugar de excepciones. Esto hace que el código sea más predecible y seguro, similar a Rust pero con sintaxis en español.