Pull to refresh

Comments 11

Я бы хотел добавить, что библиотеки на Clojure довольно компактные по размерам и доступные для понимания. В отличии от, например, Spring из Java код Ring и Compojure приятно читать и он, что удивительно, простой. Мне лично для работы с Clojure помог сайт http://www.4clojure.com/ всем начинающим я рекомендую порешать задачки оттуда.
Это точно, пришлось копаться в прожекте на Spring, ощущение что там пишут код ради кода, вначале все «по полочкам разложат», тучу классов хелперов, dao, репозиториев наколбасят, есть несколько разных аннотаций которые делают одно и тоже, но разные типа чтобы понимать для каких мест они используются и тд… в итоге логики самого приложения не видно за всем этим
UFO just landed and posted this here
Отлично, спасибо за статью, я сам задумывался о том, что недостаточно информации про clojure(script) на хабре.
Начал было неспешно писать про то, как готовить изоморфные «фуллстек» приложения на Clojure + ClojureScript + Datomic (Component, Immutant, Om, Weasel, tao, Nashorn, etc...).
Пока руки не доходят дописать. Плюс само приложение есть желание перепилить на om-next. Надеюсь, что осилю до конца лета.
Мне было бы интересно прочитать про использование ClojureScript, сравнение с CoffeeScript/JavaScript и, конечно же, впечатление программиста от использования. Так что, автор, если напишите — лично я буду признателен.
Это вопрос времени, к сожалению в настоящий момент моих познаний в ClojureScript явно не достаточно, чтобы написать полноценную статью и описать в ней что-либо полезное для уважаемых Хабражителей. Следующая статья будет про mongodb а точнее про библиотеку Monger и про её использование в веб-разработке.

Что касается ClojureScript'а и его сравнения с JavaScript, дабы не плодить здесь ссылок отправил вам сообщением. Для интересующихся — очень содержательно и с юмором о ClojureScript рассказывает Александр Соловьев в своей презентации по ClojureScript.
Можно тоже ссылочку? Спасибо!

Я только-только начал использовать clojure для переписывания части своих python модулей в одном проекте. Разбираюсь с языком по ходу дела, так что даже не все еще конструкции знаю.

Но, глядя на код в примере, не могу не отметить, что этот код пугающий. :) Как можно не запутаться в этой сложности? Я вот тут "на глаз" подправил структуру ветвлений (и заодно убрал комментарии, которые тут были только для статьи). В строке c db/get-user hash-map тоже свернул в строку -- в угоду читабельности всего этого длинного ветвящегося кода. Для return-errors изменил на сокращенный вариант объявления анонимной функции. Для такого вида и параметры можно в строку тогда размещать, но тут уже кому-как нравится.

В таком вот виде лично я могу код читать и понимать. Такое умещается в часть экрана. И четко видно все вложенности по уровням отступов, когда они идут рядом.

Может за счет какого-то редактора можно нормально работать с кодом из примера, я не знаю. :) Но у меня его читать не получается, пока не переформатируешь. Мозг ломается от перескакиваний туда-сюда.


P.S. Жаль, что тут нет подсветки синтаксиса Clojure. Без этого не очень корректно/наглядно показывает.

(defn login-controller
  "Авторизация пользователя"
  [request]
  (let [form {:login (get-in request [:form-params "login"])
              :password (get-in request [:form-params "password"])}
        validate (bouncer/validate form valid/login-validator)
        errors (first validate)
        return-errors #(util/return-messages view/login-page :error-message % :data validate)]
    (if errors
      (return-errors "Проверьте правильность введенных данных")
      (if-not (db/user-exist? {:login (:login form)})
        (return-errors "Логин не найден")
        (let [user (db/get-user {:login (:login form)} [:password])]
          (if-not (hashers/check (:password form) (:password user))
            (return-errors "Неверный пароль")
            (do
              (db/update-user {:login (:login form)} {:visited (util/date-time)})
              (util/create-session request (:login form) "/"))))))))

Sign up to leave a comment.

Articles