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
| Tipo | Constructores | Descripción |
|---|---|---|
| Opcion | Alguno(valor), Algo(valor), Some(valor) | Representa la presencia de un valor |
| Opcion | Ninguno(), None() | Representa la ausencia de valor |
| Resultado | Ok(valor) | Representa una operación exitosa |
| Resultado | Error(mensaje), Err(mensaje) | Representa un error con mensaje |
Funciones principales
| Función | Descripció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
- Manejo de errores: Reemplazar excepciones con valores de retorno explícitos
- Valores opcionales: Representar valores que pueden o no estar presentes (buscar en mapas, parsear, etc.)
- Encadenamiento seguro: Usar
mapearyobtener_o_sinopara operaciones sin riesgo de error - FFI: Retornar Opcion o Resultado desde funciones nativas que pueden fallar
💡 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.