Advertisement
Advertisement

More Related Content

Slideshows for you(18)

Advertisement

Расстаемся с мифами о ФП

  1. λ Расстаемся с мифами о функциональном программировании
  2. Распространенное — ФП это сложно — ФП не имеет отношение к практике — ФП спасает от багов — Монада над категорией K — это моноид в моноидальной категории эндофункторов End(K)
  3. ФП — это не map/lambda ','.join(map(str, filter(None, account_ids))) — Давай выпилим эту функциональщину?
  4. Вы все программировали в Ф-стиле — это математика — переменные постоянны — внезапно! x := x + 1
  5. Не все Ф-языки действительно функциональны — чистых Ф-языков мало — CL, Clojure и др. поощряют писать в ФП-стиле — возможно, ваш язык поддерживает ФП
  6. ФП имеет мат. обоснование — Тьюринг и Черч открыли лямбда-исчисления — Функции ведут себя как числа — Каррирование, композиция — За этим стоит мат. аппарат (в отличии от ООП)
  7. Чему учит ФП? Не хранить состояние, изолировать ввод-вывод
  8. С состоянием трудно жить # Class.data = None obj.set_data(data) obj.process_data() obj.send_data() print obj.data #?
  9. Ввод-вывод где попало — Абстракции: ORM, логи, сетевые вызовы — Трудно тестировать — Монады. Ввод и вывод отдельно, преобразования — отдельно.
  10. λ ФП учит правильным вещам, но следовать им трудно (поначалу)
  11. Знакомо? — Давай добавим здесь лог — Давай просто прокинем через self — Давай здесь подправим словарь — Тут просто добавим кешик
  12. ООП — сборка паззла class FooPermission(permissions.BasePermission): def has_permission(self, request, view): pass class BarPermission(permissions.BasePermission): def has_permission(self, request, view): pass FooPermission or BarPermission???
  13. ООП — сборка паззла def has_perm_foo(request): return True def has_perm_bar(request): return False def make_perm_any(*funcs): return lambda request: any(f(request) for f in funcs) has_perm_foo_or_bar = make_perm_any( has_perm_foo, has_perm_bar)
  14. ФП в Питоне — Гвидо, ниспошли нам ФП! — fn.py: умножаете класс на число и получаете функцию list(map(_ * 2, range(5))) == [0,2,4,6,8] — Протиснуться в ООП трудно
  15. ФП — это прогрессивный джипег body = read_body(input) show_body(body) deformed = deform(body, force) show_body(deformed) public static class App { private Body body; public set_body(Body body) .... }
  16. Итог ФП учит избегать состояния и изолировать IO ФП наводит порядок в коде (и в голове) Важно знать не Ф-языки, а подход
  17. λ Вопросы?
Advertisement