SlideShare a Scribd company logo
Clojure
Личный взгляд
Срыв покровов
— Это не тот Common Lisp
— Разница культур
— Это очень мощный и выразительный язык...
— ...подкрепленный Лиспом
— Скобочки не только круглые )))
Основное
— Работа с коллекциями
— Неизменяемость
— Транзакционная память
— Типы там, где они нужны
Все, что есть в ООП
— Расширение протоколов
— Паттерн-матчинг
— Ссылочные объекты
ClojureScript
— Компилируется в JS
— Модульность, неймспейсы, макросы
— Повторное использование кода Clojure
— Om — биндинг к React
Свобода действий
— Макросы
— свой DSL, например, ORM
— работа с деревьями (XML, HTML)
— многопоточность
ORM DSL example
(-> (select :*)
(from :users)
(where '(= id 5)
'(= status "active"))
sql/format)
Еще о макросах
(/ (* 2 (+ 2 3)) 100)
(expr (2 + 3) * 2 / 100)
(for [item some-seq]
(* item 2))
(-> initial func1 func2 func3)
IDE
— Емакс (trollface)
— Light Table
— Idea plugin
— Cursive IDE
Гомогенность
— Ring — призводительный веб-фреймворк
— приложение это функция (app request)
— добавили роутинг — получили функцию
— добавили мидлварь — получили функцию
— и тд.
Разве можно ничего не менять?
(defn wrap-user [view]
(fn [request]
(view (assoc
request
:user (when-let [user-id
(-> request :session :user-id)]
(get-user-by-id user-id))))))
(def app (-> app-routes auth/wrap-user))
Не надо про скобочки!
— Они теперь разные
(function($){$('.foo').click(function()
{alert(123);})})(jQuery); — 18 шт
Лисп упрощает сам себя
(get (get (get response :data) :user) :name)
(getin response [:data :user :name])
(-> response :data :user :name)
Pros
— библиотеки
— простота
— uberjar: деплой, дистрибуция, кроссплатформенность
— свобода
— производительность
— Google for "awesome-clojure"
Cons
— непривычно!
— для серьезной разработки нужен Емакс
— (пока еще) мало вакансий
— ограничения Java-платформы
Спасибо!
Вопросы?

More Related Content

PPT
Эффективный AJAX
PDF
Сравнение парсеров Json. Android SDK, Gson, Jackson
PDF
Elixir & Phoenix – fast, concurrent and explicit
PPTX
Control flow in_elixir
PPT
Pattern matching
PDF
Основы машинного обучения. Дмитрий Соболев
PDF
Эффективный AJAX
Сравнение парсеров Json. Android SDK, Gson, Jackson
Elixir & Phoenix – fast, concurrent and explicit
Control flow in_elixir
Pattern matching
Основы машинного обучения. Дмитрий Соболев

More from Ivan Grishaev (14)

PDF
NoSQL pain
PDF
Что такое говнокод
PPTX
Why everyone like ruby
PDF
В поисках удаленной работы за рубежом
PDF
Еще раз про качество
PDF
От Make к Ansible
PDF
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
PDF
10 вопросов, которые следует задать будущему работодателю
PDF
тесты с фикстурами
PDF
Project Management в разрезе бихевиоризма и общей педагогики
PDF
Agile or not agile
PDF
Ci на базе docker
PDF
Erlang, который мы потеряли
PDF
Расстаемся с мифами о ФП
NoSQL pain
Что такое говнокод
Why everyone like ruby
В поисках удаленной работы за рубежом
Еще раз про качество
От Make к Ansible
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
10 вопросов, которые следует задать будущему работодателю
тесты с фикстурами
Project Management в разрезе бихевиоризма и общей педагогики
Agile or not agile
Ci на базе docker
Erlang, который мы потеряли
Расстаемся с мифами о ФП
Ad

Личный взгляд на Clojure