Introduction to the Ramda Functional Programming Library

Introduction to the Ramda Functional Programming Library

Daily short news for you
  • Morning news, does everyone remember the lawsuit of Ryan Dahl - or more accurately, the Deno group against Oracle over the name JavaScript?

    Oracle has responded that they are not giving up the name JavaScript 🫣

    https://x.com/deno_land/status/1876728474666217739

    » Read more
  • Are people taking their Tet holidays early or what? Traffic has dropped significantly this whole week 😳. It's a bit sad to talk to myself, so if anyone passes by and reads this, please drop a "comment" for some fun at home. You can say anything since it's anonymous 😇🔥

    » Read more
  • Someone asked me where I get my news so quickly, or how I find so many tools and projects... where do I get all of that? Well, there’s a source far on the horizon but close right in front of you, and that is the Github Trending page.

    This page tracks the repositories that have the most "stars" according to day/week/month. It also allows you to filter by programming language, and each language represents a kind of theme. For example, Python is buzzing about AI, LLMs..., Rust has all the super powerful tools, and Go is... just a continuous plaything 😁. Meanwhile, JavaScript 🫣😑

    » Read more

What is Ramda?

Ramda is a library that contains many utility functions to support JavaScript programming. If you have heard of or used lodash before, you can imagine that the functionality of Ramda is similar. If you have never heard of or used either library, keep reading.

The Utility of Ramda

Let's consider a simple problem: getting the "name" property from an object person.

const person = {
  name: "Coffee",  
  age: 18,  
}

Simple, right? We just need to call person.name and we immediately get the data "Coffee". You can use this approach to quickly retrieve data, but what if person has a value of null or undefined? It's best to wrap it in a utility function for reuse.

Now let's make it more flexible by writing a function specifically for retrieving an object property.

function get(obj, attr) {
  return obj[attr];
}

Now, we can call get(person, "name") to get the data "Coffee".

However, this function still needs improvement. If obj is undefined or null, or simply not an object, the get function will throw an error. You can check some conditions before getting the value, but that would just take more time and effort on your part.

Understanding this issue, Ramda has provided a function named prop specifically for getting the value of a property.

const R = require('ramda');

R.prop("name", person); // Coffee
// or
R.prop("name")(person); // Coffee
// or
const getName = R.prop("name");
getName(person); // Coffee

"Oh, if that's all, why do people like using it?" Because prop is just one of many functions that Ramda supports. There are many other functions that provide powerful features which you don't have to spend time rewriting. Furthermore, they can be easily combined with each other to become even more "boss".

For example, combining Ramda functions to filter the objects in the people list that have "age" > 18 and sorting them in descending order by "age".

R.pipe(
  R.filter(
    R.pipe(R.prop('age'), R.lt(18)),  
  ),  
  R.sortWith([
    R.descend(R.prop('age')),  
  ])
)(people)

At first glance, the above code may be long and difficult to understand. To understand and apply Ramda, the only way is to view the descriptions of all the functions on its homepage. Moreover, you also need to understand how curry functions work.

Why Should I Use Ramda?

As mentioned at the beginning of the article, Ramda is a collection of general-purpose utility functions suitable for many problems. One difference from other similar utility libraries is that Ramda follows a functional programming style. Therefore, Ramda is often used in projects that adopt functional programming.

What Makes Ramda Special?

Ramda is designed in a functional programming style, where immutability and pure functions are its core values. This helps you handle code with simplicity and clarity.

Most functions in Ramda support currying. This allows you to easily create new functions from existing ones by not providing their final arguments.

The parameters of functions are ordered to facilitate the application of curried functions. The final data is usually requested last.

Conclusion

This article serves as an introduction to the Ramda utility library for functional programming in JavaScript. Ramda provides many functions focused on solving small problems, and you can easily combine them to create a powerful program.

When Ramda becomes a common language in many projects, it will make deployment and maintenance easier for everyone.

Premium
Hello

5 profound lessons

Every product comes with stories. The success of others is an inspiration for many to follow. 5 lessons learned have changed me forever. How about you? Click now!

Every product comes with stories. The success of others is an inspiration for many to follow. 5 lessons learned have changed me forever. How about you? Click now!

View all

Subscribe to receive new article notifications

or
* The summary newsletter is sent every 1-2 weeks, cancel anytime.

Comments (1)

Leave a comment...
Avatar
Tùng Nguyễn2 years ago
Ảo quá thấy cách viết này còn khó hiểu hơn
Reply
Avatar
Xuân Hoài Tống2 years ago
@gif [10JhviFuU2gWD6]
Scroll or click to go to the next page