Найти тему
Работяги

Почему Ramda.JS, а не Lodash? Часть 1 - prop, propEq, props

Всем привет! Сегодня начнем микроцикл статей, посвященных очень удобному инструменту для функциональной работы в JS/TS коде, который называется Ramda.JS. По сути, эта библиотека является логическим продолжением и развитием широко известной и уважаемой библиотеки Lodash, без которой многие JS-разработчики уже не могут представить работы.

Итак, сегодня, как можно догадаться из заголовка, мы рассмотрим семейство функций, облегчающих работу со свойствами в JS в широком смысле этого слова, т.е. данные функции будут применимы как к объектам, так и к массивам. В данной статье мы постараемся рассказать о применении данных функций именно в контексте их практического применения, используя синтетические примеры только для большей наглядности.

Итак, первой на очереди стоит функция prop – в документации эта функция описана, как функция высшего порядка, возвращающая другую функцию, которая при указании объекта возвращает указанное свойство этого объекта, если такое свойство существует. Давайте же на примере рассмотрим, что это означает.

Эта функция каррированная, что позволяет передавать ей аргументы частично. По умолчанию функция принимает два аргумента. Первый – имя свойства, значение которого необходимо вернуть. Второй – сам объект. Однако, часто бывает так, что мы, используя композицию, передаем только первый аргумент и далее мы рассмотрим такой пример.

-2

На скриншоте выше видно, как ведет себя функция, примененная к конкретному объекту. Теперь давайте рассмотрим полусинтетический пример, в котором мы, например, сделали запрос к какому-либо API и получили в ответ объект, из которого нам необходимо получить значение конкретного поля, модифицировать его (в нашем примере мы воспользуемся функцией инкремента) и вернуть в переменную итоговое значение после всех манипуляций. Пример подобного кода на скриншоте ниже.

-3

Следующая функция – props. Эта функция уже более часто применяется в практике, нежели предыдущая, т.к. уже реально помогает повышать читаемость кода. Эта функция аналогично предыдущей, принимает два аргумента. Первый – массив имен свойств, значения которых необходимо вернуть. Второй – сам объект. Рассмотрим подробнее сначала на общих примерах, а потом перейдем к практическому примеру использования.

-4

Как видим, логика работы функции prop сохранилась, но теперь она применяется не к единичному свойству, а к набору свойств.

Давайте же рассмотрим задачу из практики. Предположим, что вызов стороннего API вернул нам некий объект с 4 полями, из которых нам реально нужны только 2, имена которых мы знаем. Реализация стандартными функциями JS:

-5

Как видим, не самая простая для восприятия конструкция. При этом, мой опыт позволяет ее максимально упростить😊. Есть гораздо более сложные реализации аналогичного функционала. В противовес рассмотрим реализацию с использованием Ramda:

-6

Насколько более читаемым стал код? В этом и состоит основная сила подобных библиотек!

И последняя на сегодня полезная функция – propEq. Она позволяет нам удобно реализовывать различные отборы по значению свойства с определенным именем. Для рассмотрения возьмем пример из официальной документации, для этой функции он довольно неплохо объясняет принцип ее работы.

-7

На скриншоте выше очень хорошо показано, как применяется эта функция. От себя же добавлю, что таких параметров фильтрации, как hasBrownHair можно сделать несколько и в итоговом фильтре комбинировать их как угодно.

Что ж, на этом сегодняшний наш рассказ о библиотеке Ramda.JS подошел к концу. В следующих статьях мы расскажем вам о других полезных ее функциях и на практических примерах покажем их применение, так что не забывайте поддержать нас подпиской, поставить лайк этой статье, если она вам понравилась, а также оставить свой комментарий если это было вам полезно, или наоборот – вы с чем-то не согласны😊

Ссылки на наши ресурсы – ниже:

https://t.me/podcust_rabot9g

https://www.youtube.com/@Rabot9gi

https://vk.com/club224443714