or_return y or_else en Odin
El idioma de errores de Odin: los errores son valores comunes, y dos operadores acortan la plomería.
package main
import "core:fmt"
Vault_Error :: enum {
None,
Wrong_Combination,
}
open :: proc(guess: int) -> (prize: string, err: Vault_Error) {
if guess == 628 do return "deed to the tin mine", .None
return "", .Wrong_Combination
}
// or_return forwards a non-zero error to this proc's own error slot.
heist :: proc() -> Vault_Error {
prize := open(628) or_return
fmt.println("inside:", prize)
return .None
}
main :: proc() {
if heist() == .None do fmt.println("clean getaway")
// or_else supplies a fallback when the ok flag is false.
berths := make(map[string]int)
defer delete(berths)
berths["Skua"] = 4
spot := berths["Tern"] or_else 0
fmt.println("unknown ships anchor at", spot)
}
Cómo funciona
opendevuelve un valor y unVault_Error;.Nonees el todo-despejado.open(628) or_returnreenvía cualquier error no-cero a la ranura de error deheist.berths["Tern"] or_else 0pone un respaldo cuando la bandera ok es falsa.
Palabras clave y builtins usados aquí
deferdeletedoenumifimportintmakemapor_elseor_returnpackageprocreturnstring
El intento, en números
- Líneas
- 30
- Caracteres a escribir
- 691
- Tokens
- 150
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 138 segundos.
Paso 2 de 3 en Idiomas del lenguaje; paso 17 de 27 en Fundamentos del lenguaje.