Introduction to the Ramda Functional Programming Library

Introduction to the Ramda Functional Programming Library

Daily short news for you
  • Manus has officially opened its doors to all users. For those who don't know, this is a reporting tool (making waves) similar to OpenAI's Deep Research. Each day, you get 300 free Credits for research. Each research session consumes Credits depending on the complexity of the request. Oh, and they seem to have a program giving away free Credits. I personally saw 2000 when I logged in.

    I tried it out and compared it with the same command I used before on Deep Research, and the content was completely different. Manus reports more like writing essays compared to OpenAI, which uses bullet points and tables.

    Oh, after signing up, you have to enter your phone number for verification; if there's an error, just wait until the next day and try again.

    » Read more
  • I just found a quite interesting website talking about the memorable milestones in the history of the global Internet: Internet Artifacts

    Just from 1977 - when the Internet was still in the lab - look how much the Internet has developed now 🫣

    » Read more
  • Just thinking that a server "hiding" behind Cloudflare is safe, but that’s not necessarily true; nothing is absolutely safe in this Internet world. I invite you to read the article CloudFlair: Bypassing Cloudflare using Internet-wide scan data to see how the author discovered the IP address of the server that used Cloudflare.

    It's quite impressive, really; no matter what, there will always be those who strive for security and, conversely, those who specialize in exploiting vulnerabilities and... blogging 🤓

    » 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]