Что такое простое объяснение декораторов в JavaScript и насколько это полезно в функциональном программировании - PullRequest
0 голосов
/ 04 мая 2018

Что такое декораторы в javascript по сравнению с HOCs.

У меня есть хорошая ментальная модель HOC, и поэтому я хочу использовать ее как ориентир для понимания декораторов.

Заранее спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Я постараюсь привести простой пример. Предположим, вы хотите сделать Animal, и животное может иметь функциональность eat, sleep и make noise. Теперь вы создаете Dog путем расширения животных (классическая модель наследования). Dog переопределит функцию make noise на bark, eat на carnivores и т. Д. Корова переопределит функцию make noise на Moo, eat на herbivores. Это все хорошо, но затем наступает момент, когда Mountain Dog даже не make noise. Мы должны выбрать функцию make noise и поместить ее в Cow, а для Dog у нас есть различные функции в классах для make noise. Это был простой пример, когда классическое наследование делает код подверженным немасштабируемости, потому что требования постоянно меняются, и именно тогда функциональное программирование приходит на помощь с шаблоном decorator. Для приведенного выше примера, я не буду заботиться о type животных. У меня будут разные функции для каждой функции.

function eat(type) {
    //I'm carnivores, herbivores
    console.log(`I'm ${type}`);
}

function makeNoise(noise){
    //bark, Moo
    console.log(`I ${noise}`);
}

function sleep(sleepingWay){
    console.log(`I ${sleepingWay}`);
}

Now, we can define animals as by decorating empty `Animal` as: 

cow = compose(eat('herbivores'), makeNoise('Moo'))(Animal)
dog = compose(eat('carnivores'), makeNoise('Bhu'), sleep('at day'))(Animal)
mountainDog = compose(eat('carnivores'), sleep('at day'))(Animal) //I don't make noise

Я не пишу реальный код. Я просто даю представление о том, почему мы должны это использовать.

Другое преимущество использования функционального программирования заключается в том, что тестирование становится очень простым, потому что вы должны тестировать отдельные функции, и, в то время как кодирование реагирует, это экономит много вашего времени и энергии. Я использую пересобрать все время и даже не использую ключевое слово class.

Вы должны позаботиться о том, чтобы все функции были pure, а состояние было immutable. Надеюсь это поможет. Дайте мне знать, если вам нужно дальнейшее понимание

...