This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-08-29
Channels
- # aws (1)
- # beginners (78)
- # boot (27)
- # cider (16)
- # clara (15)
- # cljs-dev (84)
- # cljsjs (13)
- # cljsrn (19)
- # clojure (65)
- # clojure-france (10)
- # clojure-italy (8)
- # clojure-russia (35)
- # clojure-spec (34)
- # clojure-uk (124)
- # clojurescript (50)
- # clojutre (3)
- # core-async (16)
- # data-science (18)
- # datascript (1)
- # datomic (9)
- # emacs (2)
- # flambo (3)
- # fulcro (55)
- # graphql (3)
- # hoplon (4)
- # jobs (2)
- # juxt (21)
- # keechma (6)
- # lumo (73)
- # off-topic (4)
- # om (10)
- # onyx (5)
- # parinfer (1)
- # pedestal (3)
- # re-frame (60)
- # reagent (19)
- # specter (24)
Привет! Кто как делает подобные вещи? letr из https://github.com/aphyr/dom-top
clojure
(defn register [ctx params]
(letr [_ (if-let [err (check-logged-out ctx params)]
(return [nil err]))
_ (if-let [err (check-params params)]
(return [nil err]))
_ (if-let [err (check-registered ctx params)]
(return [nil err]))
user-id (create-user ctx params)
_ (sign-in ctx user-id)]
[{:user-id user-id} nil]))
Я не хочу тянуть сюда монаду Either и не хочу бросать исключения.
Хотя это и так очень похоже на Either.
Хотя могу и поменять свое мнение, если будет понятны их достоинства в этой ситуации.
Ситуация может распространиться не только на обработку ошибок, но и на ранний возврат заначения.я бы так сделал
(let [err (or (check-logged-out ctx params)
(check-params params)
(check-registered ctx params))
res (when-not err
(create-user ctx params)
{:user-id (sign-in ctx params)})]
[res err])
можно и let на самом деле опустить, но читаться будет еще хуже
по идее вот тут должен быть let
(when-not err
(create-user ctx params)
{:user-id (sign-in ctx params)})
а зачем тут нужен let?
а, ну как появится то конечно нужно будет что-то поменять) но тут вариантов как это сделать понятнее будет много, например вместо let внести все эти вызовы в body
есть одна статья, кину если вспомню
там что-то было то ли про F#, толи про C# с неплохими илюстрациями в виде рельс
с монадами конечно) но сама статья была неплохой
да, она
нет) по крайней мере мне не попадалось такого) но монады это способ реализации, типа один из многих. сам принцип лучше ухватить) мол реализуйте ваши функции как можно более изолированными + задайте стандартный интерфейс для проброса ошибки
(defn call [ctx params]
(let [err (or (check-logged-out ctx params)
(check-params params)
(check-registered ctx params))
res (when-not err
(let [user-id (create-user ctx params)
_ (sign-in ctx user-id)]
{:user-id user-id}))]
[res err]))
тут без let не обойтись, в твоем пример ошибкаа… понял, если не менять sign-in, то да
спс, почитаю