Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Functional Reactive Programming & ClojureScript. Alexander Solovyov

Dd3f18c87b851137000c7427d7bd5d32?s=47 fwdays
March 13, 2013

Functional Reactive Programming & ClojureScript. Alexander Solovyov

Dd3f18c87b851137000c7427d7bd5d32?s=128

fwdays

March 13, 2013
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. Functional Reactive Programming & ClojureScript Alexander Solovyov

  2. Вводная • Графические интерфейсы - это история про изменение состояния

    o ввод в текстовое поле o асинхронный HTTP запрос • Время - важно o Запрос X исполнить после запроса Y o Не слать запросы, если нет активности
  3. Как всë обычно делается • События • Хендлеры • Что-то

    произошло - обновили состояние
  4. Проблемы событий • Это действие, а не результат • Плохая

    компонуемость • Неявное состояние везде • Состояние системы очень хрупкое • Тяжело противостоять ошибкам • Приходится много планировать наперëд
  5. FRP • Как в икселе • Модель данных: формулы и

    зависимости • Behavior (Flapjax), Signal (Bacon.js), Observable (RxJS), Cell (Javelin) Значения, изменяемые со временем
  6. Зачем это нужно • Легко компоновать • Легко увидеть текущее

    состояние системы • Нет зависимости от неудачного планирования
  7. Обычные вычисления var a = 0; b = a +

    10; a = 10; console.log(b); // -> 10
  8. Реактивные вычисления var a = constantB(0); var b = liftB(function

    (x) { return x + 10; }, a); a.set(10) console.log(b.valueNow()); // -> 20
  9. Комбинирование var a = constantB(10), b = constantB(20), c =

    liftB(function (x, y) { return x + y }, a, b); console.log(c.valueNow()); // -> 30
  10. Но на самом деле это история о другом

  11. ClojureScipt! • Лиспо-образный • Функциональный • Неизменяемые структуры данных •

    Маленький и строго определëнный
  12. Ничего особенного • Синтаксис для структур данных o (list), [vector],

    {:hash map}, #{set} • Короткий синтаксис для анонимных функций o (map #(* % 2) (range 5)) • Простой доступ в платформу o (.toString (ClassName. arg1 arg2)) Но очень, очень хорошо
  13. И теперь красота (def a (cell 0)) (def b (cell

    (+ a 10))) (log @b) ;; -> 10 (swap! a inc) (log @b) ;; -> 11
  14. Ну ок, а хтмл? (def form (cell {:name (input-cell "#name")

    :password (input-cell "#password") :submit (click-cell "#submit")}) (on form [:submit] #(log @cell))
  15. Ну й шо? •А теперь можно брать и писать •Про

    архитектуру я не успею рассказать o Ну там разделяйте на модули и всë такое •Продолжение следует o Следите на http://solovyov.net/  (по теме там пока ничего нет)
  16. Ссылки • http://flapjax-lang.org/ • http://github.com/tailrecursion/javelin • http://github.com/clojure/clojurescript • http://solovyov.net/