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

Functional Reactive Programming & ClojureScript...

fwdays
March 13, 2013

Functional Reactive Programming & ClojureScript. Alexander Solovyov

fwdays

March 13, 2013
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

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

    o ввод в текстовое поле o асинхронный HTTP запрос • Время - важно o Запрос X исполнить после запроса Y o Не слать запросы, если нет активности
  2. Проблемы событий • Это действие, а не результат • Плохая

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

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

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

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

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

    liftB(function (x, y) { return x + y }, a, b); console.log(c.valueNow()); // -> 30
  8. Ничего особенного • Синтаксис для структур данных o (list), [vector],

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

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

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

    архитектуру я не успею рассказать o Ну там разделяйте на модули и всë такое •Продолжение следует o Следите на http://solovyov.net/  (по теме там пока ничего нет)