Introduction to the Ramda Functional Programming Library

Introduction to the Ramda Functional Programming Library

Daily short news for you
  • Since the feature to suggest search phrases appeared below the search bar, many people have been clicking on it, everyone. The search volume for other phrases has also increased many times compared to before.

    However, alongside that, the blog is now facing an issue with search "spam." There is someone mischievously filling in random links into the box, which wouldn't be a big deal if I hadn't added AI to that search box; each query costs a certain amount of tokens. It's truly destructive 💀

    » Read more
  • Now it's time for the MCP race. Everyone is racing to launch MCP servers for their services. It's only logical because no one wants to be left behind 😅.

    Recently, there is mcp-server-cloudflare and @hyperdrive-eng/mcp-nodejs-debugger.

    » Read more
  • I'm creating a spell-checking tool for the articles I'm writing. The idea is to break the sentences down into meaningful words and then compare them with the Vietnamese dictionary. Additionally, if a word is not in the dictionary, I add it to my own personal dictionary.

    It's coming along well, though there's still a lot of fixing to do, but basically, it can identify misspelled words. It's quite scary, actually, because there are words I've misspelled that I thought were correct 🫣

    » 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

Me & the desire to "play with words"

Have you tried writing? And then failed or not satisfied? At 2coffee.dev we have had a hard time with writing. Don't be discouraged, because now we have a way to help you. Click to become a member now!

Have you tried writing? And then failed or not satisfied? At 2coffee.dev we have had a hard time with writing. Don't be discouraged, because now we have a way to help you. Click to become a member 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]