Александр
А JS впринципе работает на паттерне прототип
🏴‍☠️
Denis
https://refactoring.guru/ru/design-patterns/decorator
Ты когда говорил про создавать новые декораторы, ты имел ввиду паттерн?
Denis
Александр
Ты когда говорил про создавать новые декораторы, ты имел ввиду паттерн?
да) Все готовое что видишь в языках например в питоне - это просто встроенная реализация паттерна)
Denis
да) Все готовое что видишь в языках например в питоне - это просто встроенная реализация паттерна)
Покажи пример нового декоратора, который создают новые на проекте люди
Александр
Покажи пример нового декоратора, который создают новые на проекте люди
ну если найду с прошлого проекта код, покажу На текущем благо таких индивидов нет
Denis
https://refactoring.guru/ru/design-patterns/decorator
Как этот паттерн относится к проверке типов?
Александр
Как этот паттерн относится к проверке типов?
-_- Делают декоратор, который добавляет проверку типов хоть даже как сверху гардов Ладно, я понял, проще пример написать
Александр
Как этот паттерн относится к проверке типов?
https://codesandbox.io/s/js-playground-forked-1rzkuo?file=/src/index.js
Александр
Вот такую фигню писали некоторые, вместо того чтобы нормальную либу взять)
Denis
https://codesandbox.io/s/js-playground-forked-1rzkuo?file=/src/index.js
Так это не декоратор, а прокси
Denis
Декоратор сначала выполняет действие, а к результату добавляет что-то своё
Denis
А прокси перехватывает вызов как сделано у тебя
Denis
Не класс Proxy, а паттерн
Denis
У тебя как миддлварь почти работает
Denis
На самом деле, если делать чисто на классах прилку, то типизации конструктора достаточно. Даже и она не нужна нафиг, если честно. Комменты по JSDoc пиши и фсё
Александр
Так это не декоратор, а прокси
ок, спускаемся в детали. Что есть прокси а что есть декоратор? Если примитивным языком, то прокси нужен для контроля состояния без изменения в интерфейсе объекта, а декоратор добавляет новый функционал к объекту. В данном случае это декоратор. Он не контролирует состояние, а добавляет функционал для указанной в параметре функции
Александр
Делает обертку над функцией
Si 🫧
Блин работа так прокачивает. Не понимаю, как можно было так долго сидеть и пилить простые пет проекты
Denis
Подходов тьма тьмущая) Почему-то на рынке преобладает именно typescript)
Это не обёртка, а остановка, доп проверка и возможная остановка работы. Разве декораторы могут останавливать работу?
Александр
Я на него тоже в свое время плевался, но в итоге сейчас даже свои пет-проекты с ним пилю
Denis
Декораторы работают с результатом выполнения
Александр
Это не обёртка, а остановка, доп проверка и возможная остановка работы. Разве декораторы могут останавливать работу?
декоратор добавляет логику ДО исполнения функции. Еще до того, как она вообще вызвана будет. А прокси делает проверку во время исполнения. Можно сделать как через декоратор, так и через прокси, они принципиально не сильно отличаются.
Denis
А не с входными данными
Denis
НЕ ДО
Александр
НЕ ДО
после инициализации функции, но до ее выполнения
Denis
Инициализации? Это как?
Александр
const someFunc = ()=>{} - проинициализировали someFunc decorate(somFunc) - добавили кода поверх someFunc proxy(someFunc) - подписались на какие-либо изменения someFunc И decorate и proxy, если прям грубо, добавляют код поверх функции. Вот только делают они это по разному.
Denis
Декоратор имеет альтернативное название — обёртка. Оно более точно описывает суть паттерна: вы помещаете целевой объект в другой объект-обёртку, который запускает базовое поведение объекта, а затем добавляет к результату что-то своё. Оба объекта имеют общий интерфейс, поэтому для пользователя нет никакой разницы, с каким объектом работать — чистым или обёрнутым. Вы можете использовать несколько разных обёрток одновременно — результат будет иметь объединённое поведение всех обёрток сразу.
Александр
proxy используют для объектов, а декораторы чаще для функций
Denis
Функция это и есть объект
Александр
в js да
Александр
мы вообще про теорию
Александр
Ну я покрайней мере
Denis
А в теории это паттерны ООП и применимы только к функциям (классам)
Александр
А в теории это паттерны ООП и применимы только к функциям (классам)
ох, ладно Кому нужно сами почитают, я устал писать на эту тему
Александр
А в теории это паттерны ООП и применимы только к функциям (классам)
к слову для ооп классы вообще не обязательны
Denis
Denis
Это частный случай функции
Александр
А в теории это паттерны ООП и применимы только к функциям (классам)
в теории говорится про объекты, а не функции, особенно если говорить про прокси
Александр
object oriented и паттерны для работы с объектами
Александр
Хотя реализация идет через функции, классы и другие структуры языков
Denis
Просто так объектов не бывает в ООП
Denis
Только в виде инстансов класса (функции-конструктора)
Александр
Чтобы создать объект тебе нужно вызвать функцию
и? это противоречи чему-то что я сказал?
Александр
Да
чему?
Denis
Тому что паттерны для работы только с объектами. С созданием объектов (то есть функциями) тоже идёт работа. Возьми хотя бы композицию. Не бывает композиции объектов, это про функции
Александр
Denis
Немного другие
Александр
Александр
ну вот часть тех же самых в статье например https://dev.to/patferraggi/do-you-need-design-patterns-in-functional-programming-370c
Александр
Кидаю статьи, тк самому долго и нудно писать
Александр
Я бы сказал так, не все применимы и есть некоторые свои. Но не так что немного другие вовсе
Denis
Я бы назвал это техниками. Они более низкоуровневые и участвуют в создании паттернов. Каррирование, композиция и тд
Denis
ну вот часть тех же самых в статье например https://dev.to/patferraggi/do-you-need-design-patterns-in-functional-programming-370c
Статьи я могу почитать в гордом одиночестве. Думаешь я не умею гуглить?
Denis
К тому же сайт этот говно. Большинство статей написано индусами с двумя репо на гх
Denis
За испанца ничего не скажу
Александр
Ладно, понятно, докапывайся дальше) Главное чтобы результат был)
Александр
Даже если мы выясним, что в той реализации это был прокси, а не декоратор, то ситуации это не измениит, тк обсуждали мы вообще другое. Я вижу что тебе просто докопаться охота и скучно. Так что я отваливаю, нет больше желания поддерживать пустой треп по теории
Denis
https://codesandbox.io/s/cold-firefly-d77ieh?file=/src/store/index.ts строка 10 метод на строке 24 Можешь описать их предназначение?
Denis
Точнее смысл типизировать там
Denis
Кстати, я там часть типизации пропустил, ибо не работало
Denis
Строка 10 что делает вообще?
Denis
Я бы на JS лучше накатал
Denis
Часа три бы сэкономил. Мистер кстати мне помогал с этим
Denis
Ещё бесит что d.ts файлы попадают в глобальную область. В целом ТС — это кладезь хуёвых практик
Denis
блин, vue и ts... Ну ок, щас гляну
А ты видел я для телеги тайпинги спарсил со страницы апи?
Denis
Александр
Строка 10 что делает вообще?
генерируется уникальное значение имени для provide/inject, вот только смысла нет, тк не используется