Introduction to the Ramda Functional Programming Library

Introduction to the Ramda Functional Programming Library

Daily short news for you
  • For a long time, I have been thinking about how to increase brand presence, as well as users for the blog. After much contemplation, it seems the only way is to share on social media or hope they seek it out, until...

    Wearing this shirt means no more worries about traffic jams, the more crowded it gets, the more fun it is because hundreds of eyes are watching 🤓

    (It really works, you know 🤭)

    » Read more
  • A cycle of developing many projects is quite interesting. Summarized in 3 steps: See something complex -> Simplify it -> Add features until it becomes complex again... -> Back to a new loop.

    Why is that? Let me give you 2 examples to illustrate.

    Markdown was created with the aim of producing a plain text format that is "easy to write, easy to read, and easy to convert into something like HTML." At that time, no one had the patience to sit and write while also adding formatting for how the text displayed on the web. Yet now, people are "stuffing" or creating variations based on markdown to add so many new formats that… they can’t even remember all the syntax.

    React is also an example. Since the time of PHP, there has been a desire to create something that clearly separates the user interface from the core logic processing of applications into two distinct parts for better readability and writing. The result is that UI/UX libraries have developed very robustly, providing excellent user interaction, while the application logic resides on a separate server. The duo of Front-end and Back-end emerged from this, with the indispensable REST API waiter. Yet now, React doesn’t look much different from PHP, leading to Vue, Svelte... all converging back to a single point.

    However, the loop is not bad; on the contrary, this loop is more about evolution than "regression." Sometimes, it creates something good from something old, and people rely on that goodness to continue the loop. In other words, it’s about distilling the essence little by little 😁

    » Read more
  • Alongside the official projects, I occasionally see "side" projects aimed at optimizing or improving the language in some aspects. For example, nature-lang/nature is a project focused on enhancing Go, introducing some changes to make using Go more user-friendly.

    Looking back, it resembles JavaScript quite a bit 😆

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