Pull to refresh
5
0
Александр Данилов @gen1lee

13 лет опыта коммерческой разработки

Send message
const mouseClick = (data: MouseEventData) => {
  processPick(getActiveTool(), getScreenContext(), data.x, data.y)
}

И?

Вы React'теру хотите доказать что клик не обработать в ФП?))))

И нафига мне Channels если я разбирал аналог стандартных примитивов типа Monitor? Нашелся "эксперд".

Могу добавить в бенчмарк ПР с каналами ради интереса, но сам писать не буду.

Повторяю, я ваше мнение про "это процедурное" даже отдельно разобрал в статье.

Альтернативно-одаренным нужно внимательнее читать.

А так да, это моя терминология исходя из реалий, что вы сами признали - большинство использует понятие ФП именно в этом контексте, и бесполезно с этим спорить. Дальше будет только хуже - слово процедура никто и не вспомнит.

А математический стиль - куда более правильное название как по мне, потому что понятие "функция" там используется из математики.

И с чего бы это тяжело поддерживать?

Можно написать функции для разных фигур в отдельных модулях - файлах или папках, и положить при желании в `Record<ShapeType, { getArea, getMassa, getPerimeter }>` и т.п.

Использовать `shapeByType[shape.type].getArea(shape)`, без классов и их ограничений.

При добавлении нового ShapeType компилятор подскажет какие функции нужно реализовать и куда добавить.

И в реальной жизни никто и никогда так не пишет, даже самый отсталый

В реальной жизни не используют статические и экземплярые конструкторы, и наследование? Используют и еще как, и полно другого г**на.

Ну во первых переиспользовать и вставить в другой класс легко. Допустим тоже самое для животного) ... далее просто копипаста

То есть первый способ копипаста и это хорошо?

можно реализовать и через композиции

То есть внутри собаки нужно создать User с ее полями и это хорошо? Проблема банана и макаки это круто?

В третьих, через так называемую универсальную функцию

То есть единственный способ нормально написать код это использовать функцию, то есть ФП? Так про это и есть статья, поздравляю, вы поняли ее суть.

А по факту, так мы и не узнали, как же переиспользовать метод класса в другом, не копипастя, не получая макаку с джунглями, не используя ФП.

Ничего сложного, тяу тяу тяу тяу.

Блокирующая синхронизация, привет фризы из главного потока, рейс кондишены и дедлоки. Хотя кому я объясняю..

Жду ваши крутые примеры. Вряд ли дождусь конечно.

Пока что даже одного "правильного" куска кода не набралось. Ждем, не дождемся.

Очередной демагог, тебя просили примеры кода, а их нет. Где код который нужно написать на ФП?

type Encoding = "xxx" | "yyy"

const encodeXxx(frame: VideoFrame): Bitstream {
   ...
}

const encodeYyy(frame: VideoFrame): Bitstream {
   ...
}

const encoders: Record<Encoding, (frame: VideoFrame) => Bitstream> = {
  xxx: encodeXxx,
  yyy: encodeYyy,
}

// Использование:

const main = () => {
  const frame = getFrame()
  const stream = encoders[data.encoding](frame)
}

В профиле есть ссылка на сайт, там ссылка на гитхаб.

Во-первых, ООП-шник вы достаточно рукожопый, так как реализуете полиморфизм в 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, или он из воздуха берется?

В моем примере весь код, и описан тип вместо класса:

type User = {
  id: string
  firstName: string
  lastName: string
  middleName?: string
  friendIds?: string[]
}

Также, у вас нужно перечислить все поля в конструктор, а если их 100?

Также у вас создается объект ObjectMapper. И много по мелочи.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity

Specialization

Frontend Developer, Mobile Application Developer
Lead