# So You Want to be a Functional Programmer (Part 4)

## Currying

`var add = x => y => x + y`
`var compose = (f, g) => x => f(g(x));var mult5AfterAdd10 = compose(mult5, add(10));`
`add x y =    x + y`
`mult5AfterAdd10 =    (mult5 << add 10)`

## Currying and Refactoring

`bracket str =    "{" ++ str ++ "}"doubleBracket str =    "{{" ++ str ++ "}}"`
`bracketedJoe =    bracket "Joe"doubleBracketedJoe =    doubleBracket "Joe"`
`generalBracket prefix str suffix =    prefix ++ str ++ suffix`
`bracketedJoe =    generalBracket "{" "Joe" "}"doubleBracketedJoe =    generalBracket "{{" "Joe" "}}"`
`generalBracket prefix suffix str =    prefix ++ str ++ suffixbracket =    generalBracket "{" "}"doubleBracket =    generalBracket "{{" "}}"`
`bracketedJoe =    bracket "Joe"doubleBracketedJoe =    doubleBracket "Joe"`

## Common Functional Functions

`for (var i = 0; i < something.length; ++i) {    // do stuff}`
`var things = [1, 2, 3, 4];for (var i = 0; i < things.length; ++i) {    things[i] = things[i] * 10; // MUTATION ALERT !!!!}console.log(things); // [10, 20, 30, 40]`
`var things = [1, 2, 3, 4];var newThings = [];for (var i = 0; i < things.length; ++i) {    newThings[i] = things[i] * 10;}console.log(newThings); // [10, 20, 30, 40]`
`var map = (f, array) => {    var newArray = [];    for (var i = 0; i < array.length; ++i) {        newArray[i] = f(array[i]);    }    return newArray;};`
`var things = [1, 2, 3, 4];var newThings = map(v => v * 10, things);`
`var filter = (pred, array) => {    var newArray = [];for (var i = 0; i < array.length; ++i) {        if (pred(array[i]))            newArray[newArray.length] = array[i];    }    return newArray;};`
`var isOdd = x => x % 2 !== 0;var numbers = [1, 2, 3, 4, 5];var oddNumbers = filter(isOdd, numbers);console.log(oddNumbers); // [1, 3, 5]`
`var reduce = (f, start, array) => {    var acc = start;    for (var i = 0; i < array.length; ++i)        acc = f(array[i], acc); // f() takes 2 parameters    return acc;});`
`var add = (x, y) => x + y;var values = [1, 2, 3, 4, 5];var sumOfValues = reduce(add, 0, values);console.log(sumOfValues); // 15`

--

--

## More from Charles Scalfani

Software Engineer and Architect, Teacher, Writer, Filmmaker, Photographer, Artist…

Love podcasts or audiobooks? Learn on the go with our new app.