← Todos los tutoriales
first-steps 5 min

Manejo de Errores

Las cosas salen mal. Un usuario ingresa algo inesperado, un cálculo llega a un caso imposible, un recurso no está disponible. Clean Language te da una manera limpia y legible de manejarlo.

Lanzas un error con error(), y lo capturas con onError:

functions:
    integer divide(integer a, integer b)
        if b == 0
            error("Cannot divide by zero")
        return a / b

start:
    integer result = divide(10, 2) onError -1
    print(result.toString())

    integer bad = divide(10, 0) onError -1
    print(bad.toString())
5
-1

La parte onError -1 significa: si algo sale mal, usa -1 en su lugar. Sin fallos, sin misterios — solo un valor de respaldo predecible.

Para más que solo un valor de respaldo, usa onError: con un bloque:

functions:
    integer divide(integer a, integer b)
        if b == 0
            error("Cannot divide by zero")
        return a / b

start:
    integer result = divide(10, 0) onError:
        print("Something went wrong — using default")
        -1

    print(result.toString())
Something went wrong — using default
-1

La última línea del bloque onError: es el valor que se usa como resultado. Puedes hacer cualquier cantidad de trabajo — registro, limpieza — y luego proporcionar el respaldo en la última línea.

Resumen rápido

  • Usa error("mensaje") dentro de una función para lanzar un error
  • expresión onError valorDeRespaldo — captura y proporciona un respaldo simple
  • expresión onError: con un bloque — captura y ejecuta cualquier código, la última línea es el respaldo
  • Los errores se propagan hacia arriba en la cadena de llamadas hasta que algo los captura
  • Si nada captura un error, el programa se detiene con un mensaje de error
¡Copiado!