Currying will bring you the most benefits when you're trying to do function composition. That is combining two or more functions to create a new one. If you're not interested in function composition then currying will just feels useless.
If we come back to @ridays2001
comment, I still don't see the point of currying. It feels like the main point is better code readability/complexity ? A different way of thinking at how we look at and approach the data transformation process which is somehow more interesting and fun ? Is that is about ?
This seems cool... until you realise each function just takes one argument. We got ourselves a real problem here. We want to create functions with pipe (we can't change its implementation) and we also want to use functions with multiple arguments.
One answer to this problem is currying. If literally all your functions take one argument you'll never have to face this issue while using pipe.
Let's say that second_fun needs two arguments. Fine. Curry it.
Let's just say is not explicit. I didn't want to put to much code into that comment.
In my example
map
andpick
should be curried.Notice how those two functions are curried and their last argument is
data
? This is important because it what allows this type of composition.And so we have created a new function (
process_users
) in a way that feels declarative.If
map
andpick
were not curried you'll have to do this.Currying will bring you the most benefits when you're trying to do function composition. That is combining two or more functions to create a new one. If you're not interested in function composition then currying will just feels useless.
EDIT: So I just remembered I wrote something about this topic here on dev:
Partial application
Composition techniques
Ok, now I see the currying explicitly, thank you for the explanations and I also read your "Functional programming for your everyday javascript: Partial application" to understand better the currying approach.
If we come back to @ridays2001 comment, I still don't see the point of currying. It feels like the main point is better code readability/complexity ? A different way of thinking at how we look at and approach the data transformation process which is somehow more interesting and fun ? Is that is about ?
What I'm about to say is just my opinion. Not going to claim this is the absolute truth.
"The point" of currying is to enable better function composition.
Let me present a very popular function called
pipe
.This allows us to convert this.
Into this.
This seems cool... until you realise each function just takes one argument. We got ourselves a real problem here. We want to create functions with
pipe
(we can't change its implementation) and we also want to use functions with multiple arguments.One answer to this problem is currying. If literally all your functions take one argument you'll never have to face this issue while using
pipe
.Let's say that
second_fun
needs two arguments. Fine. Curry it.Now you're free to do this.
It'll work like a charm.
But is this better? More readable? I can't answer that for you. It's a matter of style. Do what makes you happy.