Я видел этот пост в хакерские новости сегодня. Я борюсь с теми же проблемами понимания того, как чистое функциональное программирование поможет мне абстрагироваться от реальной проблемы. Я перешел с императивного на объектно-ориентированное программирование 7 лет назад. Я чувствую, что освоил его, и он сослужил мне хорошую службу. За последние пару лет я изучил некоторые приемы и концепции функционального программирования, такие как map и reduce, и они мне тоже нравятся. Я использовал их в своем объектно-ориентированном коде и был доволен этим, но при абстрагировании набора инструкций я могу думать об объектно-ориентированных абстракциях только для того, чтобы сделать код красивее.
Недавно я работал над проблемой в python и пытался избежать использования объектно-ориентированного подхода для ее решения. По большей части мое решение выглядит императивным, и я знаю, что мог бы сделать его красивым и чистым, если бы использовал ООП. Я подумал, что опубликую проблему, и, возможно, функциональные эксперты смогут предложить красивое и функциональное решение. Я могу опубликовать свой уродливый код, если нужно, но не хочу. :) Вот проблема:
Пользователь может запросить изображение или миниатюру изображения. Если пользователь запрашивает миниатюру изображения, а оно еще не существует, создайте его с помощью модуля PIL Python. Также создайте символическую ссылку на оригинал или миниатюру с удобочитаемым путем, потому что имя исходного изображения представляет собой хэш-код, а не описание его содержимого. Наконец, перенаправьте на символическую ссылку этого изображения.
В OO я, вероятно, создал бы базовый класс SymlinkImage, подкласс ThumbnailSymlinkImage и подкласс OriginalSymlinkImage. Общие данные (в классе SymlinkImage) будут такими, как путь к оригиналу. Общее поведение будет создавать символическую ссылку. Подклассы будут реализовывать метод, называемый чем-то вроде «генерировать», который будет отвечать за создание миниатюры, если это применимо, и вызов своего суперкласса для создания новой символической ссылки.