Blending Functional and OO Programming in Ruby, by Piotr Solnica

Посмотрел старое выступление Петра Сольницы о том, как он работает (работал) с Ruby on Rails.

  • Почему мы используем OOD (Object Oriented Design)? Потому что он позволяет справляться со сложностью (кода)
  • Функциональные объекты
    • неизменяемые (immutable)
    • имеют один общий интерфейс - #call(input)
    • никаких side effects
    • всегда что-то возвращают
  • Работать с неизменяемыми (immutable) объектами сложно, они толкают на создание другой архитектуры приложения
  • состояние = данные, приоритет отдается объектам без состояния (stateless objects)
  • подход (который предлагает Сольница) позволяет разделить структуру приложения с его поведением
  • всё ради того, чтобы упростить вещи: нет изменяемости - проще вносить изменения (в приложение), проще делать композицию объектов и функций
  • функциональные интерфейсы - хороший фундамент для построения high-level OO abstractions (так понятнее будет, если не переводить)

В докладе Пётр (правильно так переводить с польского?) привел несколько концепций функционального дизайна, который накладывается на объектную модель Ruby, и она не выглядит дикой химерой. Примеры, которые он приводит с логером или транзакциями, гораздо проще для понимания, чем в “классическом” ООП с тонной абстракций.

Доклад короткий, концепции из доклада могут заразить вас функциональным программированием, смотреть с осторожностью.