L
U
E
T
K
E
M
J
~
C
h
a
n
g
e
~
I
s
~
G
o
o
d
💻

161017

Curry

I wrote a log post some time ago when I had just learned about map. Excited with my new found knowledge I decided to share it with the world! Looking back I realize that I really did not understand map very well, or at least not well enough to explain it.

There is a big part of me that wants to delete that post. What if a potential employer sees it! They will see how not smart I am :( This digital trail is a terrible thing… Wait, digital trail?

If all I leave are the most accurate representations of my current knowledge - wherever that may be - no one will ever see how I grow and learn. As an employee it is vital that I be able to grow in whatever position I have. As an employer it is vital that my coworkers are also able and willing to grow.

Therefore I will not delete the cringeworthy indecipherable “explanation” of map that I wrote some time ago. Instead, in an effort to showcase the elasticity of my brain I will add to it the latest neat new thing I have learned.

Curry!

Much like how the current iteration of who I am today is the amalgamation of all the iterations that came before and to fully understand the who I am today requires that you know who I was yesterday and all the days before... This analogy - much like my attempt to explain map - is going no where. To the code!

Did you know you can create a function that returns another function that returns another function that returns… …until we have finally built our turtle!

function turtle(name) {
  return function(part1) {
    return function(part2) {
      return function(part3) {
        return `My turtle's name is ${name}. It has a ${part1}, ${part2}, and a ${part3}.`;
      }
    }
  }
}

const myTurtle = turtle('Tom')('head')('feet')('shell')
console.log(myTurtle) // My turtle's name is Tom. It has a head, feet, and a shell.

Crazy right?

But how about in some 1337 es6?

let turtle = name => part1 => part2 => part3 =>
    `My turtle's name is ${name}. It has a ${part1}, ${part2}, and a ${part3}.`

const curriedTurtle = turtle('Tom')('head')('feet')('shell')
console.log(curriedTurtle) // My turtle's name is Tom. It has a head, feet, and a shell.

TRY IT!