Срыв покровов
— Это не тот Common Lisp
— Разница культур
— Это очень мощный и выразительный язык...
— ...подкрепленный Лиспом
— Скобочки не только круглые )))
Основное
— Работа с коллекциями
— Неизменяемость
— Транзакционная память
— Типы там, где они нужны
Все, что есть в ООП
— Расширение протоколов
— Паттерн-матчинг
— Ссылочные объекты
ClojureScript
— Компилируется в JS
— Модульность, неймспейсы, макросы
— Повторное использование кода Clojure
— Om — биндинг к React
Гомогенность
— 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 шт