Production-ready functional programming

О себе

  • Программирую с 2011 года
  • PHP
  • JavaScript
  • Java
  • Scala
  • 2GIS

Функциональное программирование

1. Чистота

2. Иммутабельность

3. Композиция

Side effects

  • Работа с БД
  • Работа с очередями
  • Работа с файлами
  • Работа с сетью
  • ...
  • Concurrency

1. Чистота, иммутабельность, композиция

2. Функциональная

программа

???

Пул объектов

  • Хранит в себе какое-то количество объектов указанного типа
  • Пул фиксированный — его размер задаётся при создании
  • При создании пула все объекты создаются
  • При уничтожении пула все объекты тоже уничтожаются
  • Пул должен быть thread-safe
  • Решение должно быть написано в функциональном стиле

Технологии

  • Scala 2
  • cats-effect

DEMO TIME

  • Всё построено на композиции выражений
  • Все сайд эффекты завёрнуты в IO и явно выделены
  • Мутабельность явно выделена (через Ref и Deferred)
  • Весь остальной код чистый и иммутабельный

И что же получилось?

  • Нет ни одной переменной в чистом коде
  • Thread-safe
  • Non-blocking
  • Создали конкурентный примитив в ФП стиле

3. ФП и concurrency прекрасно чувствуют себя вместе

1. ФП не "ломается" от сайд эффектов, а только делает работу с ними более явной.

2. ФП не отменяет прошлых знаний и навыков.

Выводы

4. ФП не отличается "драматически" от просто хорошего, не функционального кода.

5. Приемущества ФП можно масштабировать всю программу целиком.

Что гуглить дальше, если стало интересно?

 1. Referential transparency

 2. IO monad

Библиотеки в помощь

  • Scala
  • cats-effect
  • Monix
  • ZIO
  • arrow-kt
  • Kotlin
  • Java
  • Functional java*

lmnet89@gmail.com

Бадальянц Юрий, 2021

Спасибо!

Made with Slides.com