• [^] # Re: Kamoulox !

    Posté par (site web personnel) . En réponse au journal Golang, oops you did it again. Évalué à 10.

    L'avantage du type Result<Data, Error> c'est les opérations que tu peux chaîner.

    Result<T, E> -> Result<U, E> -> Result<V, E> -> ...

    Tu peux donc découpler la gestion d'erreur de ton algorithme et ce sans avoir besoin d'exception et de "jump" dans le code.

    Un exemple en Elixir avec ma lib rustic_result :

    K8s.Client.get("example.com/v1", :example, selector)
     |> then(&K8s.Client.run(conn, &1))
     |> Result.or_else(fn _ -> Result.err(:not_found) end)
     |> Result.and_then(fn resource ->
     case resource["status"]["phase"] do
     "Accepted" -> Result.ok(resource)
     "Rejected" -> Result.err(:rejected)
     nil -> Result.err(:rejected)
     end
     end)

    En gros :

    • map : Result<T, E> -> Result<U, E> avec f : T -> U
    • map_err : Result<T, E> -> Result<T, E2> avec f : E -> E2
    • and_then : Result<T, E> -> Result<U, E2> avec f : T -> Result<U, E2>
    • or_else : Result<T, E> -> Result<U, E2> avec f : E -> Result<U, E2>
    • ...

    Le principe est de te permettre, grâce à ce type et ses opérations, de composer des "computations" et d'en récupérer un type final cohérent que tu peux traiter correctement.

    https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg