Logo preloader Xtension

Czy warto używać lodash?

Parę lat temu zachwyciłem się uniwersalnością i prostotą biblioteki lodash. Była ona wówczas remedium na wszystkie popularne bolączki, jakich doświadczał chyba każdy programista JavaScript-u. W tym wpisie chciałbym podzielić się swoimi osobistymi spostrzeżeniami i przemyśleniami na jej temat. Biblioteka lodash realizuje filozofię głoszoną przez jQuery, tzn. write less, do more. Redukuje często występujące problemy do pojedynczych instrukcji. Cały czas jest bardzo popularna. Gdy wejdziemy na głów
javascript
coding
altumcode-U0tBTn8UR8I-unsplash

Biblioteka lodash realizuje filozofię głoszoną przez jQuery, tzn. write less, do more. Redukuje często występujące problemy do pojedynczych instrukcji. Cały czas jest bardzo popularna. Gdy wejdziemy na główną stronę menedżera pakietów npm, to lodasha znajdziemy na szczycie listy pakietów zależnych. Dodatkową zaletą jest jej modułowość. Możemy dołączyć do naszego projektu wyłącznie te elementy, które będą nam potrzebne, redukując w ten sposób rozmiar.

 

Jako kluczowy przykład użycia tej biblioteki podam konieczność operowania na kolekcjach. Użyjemy w tym celu przede wszystkim funkcji: each, filter, map, find itd. W połączeniu z użyciem "arrow functions" dostajemy naprawdę zgrabny kod. To oczywiście moje subiektywne odczucie, zwłaszcza dla kogoś, kto wcześniej zachwycał się LINQ w C#.

 

Warto też wspomnieć, że inspiracją do powstania lodasha jest inna, nie mniej popularna biblioteka underscore, która realizuje te same zadania co lodash, jednak twórcy tej drugiej chwalą się uspójnieniem zachowania niektórych funkcji – chodziło o mutację (bądź jej brak) obiektów, na których wywołujemy te funkcje.

 

Przyznam szczerze: do niedawna uważałem, że dołączenie tej biblioteki do każdego, nawet najmniejszego projektu jest czymś oczywistym. Zauważyłem niedawno (tutaj można się zacząć śmiać), że część z tych funkcji jest dostępna w czystym JS i nie trzeba do tego jakiejś kolejnej biblioteki. Mam tu na myśli przede wszystkim metody z Array.prototype. Mimo to lodash udostępnia wiele funkcji, których póki co nie znajdziemy w standardzie. Kilka z nich pokrótce opiszę.

get

To bardzo przydatna funkcja, gdy chcemy się dostać do jakiejś zagnieżdżonej własności obiektu, a nie chce nam się na każdym poziomie sprawdzać, czy obiekt nie jest null (lub ogólnie konwersja obiektu do boolean daje wynik false).

var fragmentSamochodu = { 'koło': [{ 'opona': { 'średnica': 3 } }] };

_.get(fragmentSamochodu, 'koło.opona.średnica', 5);

W takiej sytuacji nie musimy się zastanawiać, czy samochód ma koło, a koło z kolei czy ma oponę, a na końcu czy ma zdefiniowaną średnicę. Gdy któregoś elementu po drodze nie ma, wówczas otrzymamy domyślną wartość 5.

range

Przydatna, gdy chcemy wygenerować tablicę liczb o zadanym zakresie.

clone

Wykonuje płytkie klonowanie obiektu. Jest jeszcze wersja z klonowaniem głębokim cloneDeep.

assign

Do jednego obiektu dopisywane są właściwości z drugiego obiektu. Jeśli w docelowym obiekcie są już jakieś właściwości, które występują w obiekcie źródłowym, wówczas zostaną one nadpisane.

flatten

Spłaszcza tablicę tablic, ale tylko do jednego poziomu. Jest jeszcze wersja flattenDeep, która robi to rekurencyjnie do końca.

_.flatten(['Ala', ['ma'], 'kota']);

Wynik to: ['Ala', 'ma', 'kota'].

fromPairs

Doskonała funkcja do konwersji tablicy tablic na obiekt. Na wejściu podajemy tablicę, której elementami są tablice dwuelementowe, z której pierwszy element to klucz tworzonego obiektu, a drugi to wartość tego klucza.

_.fromPairs([['długość', 5], ['szerokość', 2.5]]);

Wynik to:{długość: 5, szerokość: 2.5}. Istnieje też funkcja odwrotna: toPairs.

sortBy

Od tej pory sortowanie nie może być prostsze. Jako argument, poza oczywiście tablicą, podajemy sposób sortowania, który może być zdefiniowany jako

·         funkcja zwracająca prymitywną wartość, po której można już łatwo posortować

albo

·         tablica nazw właściwości, po których należy sortować.

Oczywiście użycie tej funkcji ma sens wówczas, gdy chcemy posortować tablicę obiektów. Wtedy największą zwięzłość osiąga się tym drugi sposobem. Dla przykładu, gdy chcemy posortować koła po promieniu opony, to napiszemy:

_.sortBy(tablicaKół, ['opona.średnica']);

groupBy

Kolejna funkcja, która uprości kod. Wywołanie podobne, co w przypadku sortBy z tą różnicą, że teraz wskazujemy metodę grupowania. Jako wynik dostaniemy obiekt z kluczami reprezentującymi wyznaczone grupy, a wartości tych kluczy będą tablicami obiektów przyporządkowanych do danej grupy.

 

Tak jak wspomniałem na początku, jest też garść funkcji, które są obecnie dostępne „za darmo” w czystym JS, operujących na tablicach. Są to między innymi: each, map, filter, reduce. Wersje lodash-owe mają jednak tę zaletę, że działają również na "null-owych" kolekcjach. Np. wywołanie_.filter(null, e => true)da nam w wyniku pustą tablicę.

 

Podsumowując

Biblioteka lodash oferuje naprawdę dużo ciekawych funkcji. Wymieniłem ich tylko kilka. Dokumentacja jest napisana przejrzyście. Każda funkcja jest zilustrowana przykładem. Funkcje pogrupowane są w kategorie w zależności od zastosowań. Myślę, że każdy znajdzie tam dla siebie zbiór funkcji, które ułatwią kodowanie. I pomimo tego, że możliwości języka JS sukcesywnie się zwiększają, to używanie lodasha cały czas jest uzasadnione.

Data publikacji: 24 sierpnia 2018
Autor: Michał Gierwatowski
Przeczytaj kolejne artykuły
certum
Mobile
Certum
Security
Unikatowa Usługa Zaufanej Strony Trzeciej
markus-spiske-AaEQmoufHLk-unsplash
Mobile
Certum
Security
JavaScript: async/await, Promise i Observable
micheile-com-visual-stories-lZ_4nPFKcV8-unsplash
Mobile
Certum
Security
Liczne korzyści podpisu biometrycznego
Stwórzmy razem wyjątkowy projekt
Napisz do nas

Xtension Sp z o.o.

ul. Opacka 12

80-338 Gdańsk

 

+48 58 351 39 66

biuro@xtension.pl

 

LinkedIn