Повторяю, я ваше мнение про "это процедурное" даже отдельно разобрал в статье.
Альтернативно-одаренным нужно внимательнее читать.
А так да, это моя терминология исходя из реалий, что вы сами признали - большинство использует понятие ФП именно в этом контексте, и бесполезно с этим спорить. Дальше будет только хуже - слово процедура никто и не вспомнит.
А математический стиль - куда более правильное название как по мне, потому что понятие "функция" там используется из математики.
Можно написать функции для разных фигур в отдельных модулях - файлах или папках, и положить при желании в `Record<ShapeType, { getArea, getMassa, getPerimeter }>` и т.п.
Использовать `shapeByType[shape.type].getArea(shape)`, без классов и их ограничений.
При добавлении нового ShapeType компилятор подскажет какие функции нужно реализовать и куда добавить.
Во-первых, ООП-шник вы достаточно рукожопый, так как реализуете полиморфизм в DisplayFormatter через класс (требуете тип User, а не интерфейс).
Во-вторых, почему то из типа User пропали другие поля и методы что в нем есть. Это второй User только с двумя полями firstName и lastName? Или все тот же User, и получается что Formatter зачем то требует целиком тип User со всем что у него есть, используя всего лишь firstName и lastName? Получается его нельзя переиспользовать, например, для собаки у которой тоже есть firstName?
В-третьих, здесь мы чтобы переиспользовать метод вынуждены были изменить изначальный код и вынести все в другой класс, используя делегирование - и именно это я как раз и описал в своих примерах кода, указывая почему это плохо.
Ты скажешь, что конечно изначально бы так (деpьмово) спроектировал с форматтером, но! Вопрос остался открытым, ты просто от него ушел. Как переиспользовать метод одного класса в другом, без проблемы банана и макаки, не подтягивая лишнее?
Ты же можешь себе представить хоть один метод хоть в одном классе? Вот как его переиспользовать в другом? Например метод Add, и только его, из ArrayList и каком нибудь BetterArrayList?
Для ФП пример getDisplayName для собаки приведен, и там все элементарно.
Это вообще что за говнокодище с какими то библиотеками, которые я почему то должен знать? Что сделать надо можно словами услышать? Если это TypeScript то вас подпускать к программированию нельзя.
А с чего бы он не обнаружил еще 2? TypeScript - куда более строгий язык чем Java или C#, если не использовать any (аналог Object в Java), то компилятор все подсветит. Даже если в switch не обработать все ситуации, или в union type появился новый тип, который не обрабатывается.
Про заводы - сейчас большинство сайтов написано на React в ФП. В тч самых сложных.
Самый популярная библиотека самых популярных языков - React, давно перешла на ФП. В Linux - ФП. Основа говнокода разве что, но про это и статья, и обложка статьи.
И?
Вы React'теру хотите доказать что клик не обработать в ФП?))))
И нафига мне Channels если я разбирал аналог стандартных примитивов типа Monitor? Нашелся "эксперд".
Могу добавить в бенчмарк ПР с каналами ради интереса, но сам писать не буду.
Повторяю, я ваше мнение про "это процедурное" даже отдельно разобрал в статье.
Альтернативно-одаренным нужно внимательнее читать.
А так да, это моя терминология исходя из реалий, что вы сами признали - большинство использует понятие ФП именно в этом контексте, и бесполезно с этим спорить. Дальше будет только хуже - слово процедура никто и не вспомнит.
А математический стиль - куда более правильное название как по мне, потому что понятие "функция" там используется из математики.
И с чего бы это тяжело поддерживать?
Можно написать функции для разных фигур в отдельных модулях - файлах или папках, и положить при желании в `Record<ShapeType, { getArea, getMassa, getPerimeter }>` и т.п.
Использовать `shapeByType[shape.type].getArea(shape)`, без классов и их ограничений.
При добавлении нового ShapeType компилятор подскажет какие функции нужно реализовать и куда добавить.
В реальной жизни не используют статические и экземплярые конструкторы, и наследование? Используют и еще как, и полно другого г**на.
То есть первый способ копипаста и это хорошо?
То есть внутри собаки нужно создать User с ее полями и это хорошо? Проблема банана и макаки это круто?
То есть единственный способ нормально написать код это использовать функцию, то есть ФП? Так про это и есть статья, поздравляю, вы поняли ее суть.
А по факту, так мы и не узнали, как же переиспользовать метод класса в другом, не копипастя, не получая макаку с джунглями, не используя ФП.
Блокирующая синхронизация, привет фризы из главного потока, рейс кондишены и дедлоки. Хотя кому я объясняю..
Жду ваши крутые примеры. Вряд ли дождусь конечно.
Пока что даже одного "правильного" куска кода не набралось. Ждем, не дождемся.
Очередной демагог, тебя просили примеры кода, а их нет. Где код который нужно написать на ФП?
В профиле есть ссылка на сайт, там ссылка на гитхаб.
Во-первых, ООП-шник вы достаточно рукожопый, так как реализуете полиморфизм в DisplayFormatter через класс (требуете тип User, а не интерфейс).
Во-вторых, почему то из типа User пропали другие поля и методы что в нем есть. Это второй User только с двумя полями firstName и lastName? Или все тот же User, и получается что Formatter зачем то требует целиком тип User со всем что у него есть, используя всего лишь firstName и lastName? Получается его нельзя переиспользовать, например, для собаки у которой тоже есть firstName?
В-третьих, здесь мы чтобы переиспользовать метод вынуждены были изменить изначальный код и вынести все в другой класс, используя делегирование - и именно это я как раз и описал в своих примерах кода, указывая почему это плохо.
Ты скажешь, что конечно изначально бы так (деpьмово) спроектировал с форматтером, но! Вопрос остался открытым, ты просто от него ушел. Как переиспользовать метод одного класса в другом, без проблемы банана и макаки, не подтягивая лишнее?
Ты же можешь себе представить хоть один метод хоть в одном классе? Вот как его переиспользовать в другом? Например метод Add, и только его, из ArrayList и каком нибудь BetterArrayList?
Для ФП пример getDisplayName для собаки приведен, и там все элементарно.
Это вообще что за говнокодище с какими то библиотеками, которые я почему то должен знать? Что сделать надо можно словами услышать? Если это TypeScript то вас подпускать к программированию нельзя.
Talk is cheap, show me the code (c).
А с чего бы он не обнаружил еще 2? TypeScript - куда более строгий язык чем Java или C#, если не использовать any (аналог Object в Java), то компилятор все подсветит. Даже если в switch не обработать все ситуации, или в union type появился новый тип, который не обрабатывается.
Про заводы - сейчас большинство сайтов написано на React в ФП. В тч самых сложных.
А ядро Linux - тоже не завод?
За слова про "ООП не знаете" ответить можешь? С примерами кода обязательно.
Забыл еще момент - глубокое копирование почему то идет через костыль с сериализацей и десериализацей в JSON (facepalm).
Существует, и я объяснил аргументами и кодом почему. Где ваш код?
Я даже привел пример далее, как писать для большей гибкости в библиотеке, и объяснил почему лучше в своем проекте "знать" обо всех типах.
Самый популярная библиотека самых популярных языков - React, давно перешла на ФП. В Linux - ФП. Основа говнокода разве что, но про это и статья, и обложка статьи.
Так вы не привели самое главное - класс User, или он из воздуха берется?
В моем примере весь код, и описан тип вместо класса:
Также, у вас нужно перечислить все поля в конструктор, а если их 100?
Также у вас создается объект ObjectMapper. И много по мелочи.