Nice, thanks for the great discussion, and I agree with your points, as always nothing is black and white, both paradigms have benfits, and yes FP can be daunting, I'm very lucky to have landed my dev job at a company with a strong FP community so have a lot of people around me to learn from.
One question, in regards to the filter function not being referentially transparent, could you make it so like this?:
itemToSearch is still closed over by the lambda (i.e. it's not one of its arguments).
Before I get into this - I really wouldn't do this in real life! It's fine that the lambda closes over itemToSearch. I'm only doing this because it's fun and I enjoy FP :D.
But since you asked... one way of handling this - if you really, really only wanted pure functions everywhere - would be to pass itemToSearch as an argument and return the friendFilter function, essentially currying the function:
Nice, thanks for the great discussion, and I agree with your points, as always nothing is black and white, both paradigms have benfits, and yes FP can be daunting, I'm very lucky to have landed my dev job at a company with a strong FP community so have a lot of people around me to learn from.
One question, in regards to the filter function not being referentially transparent, could you make it so like this?:
Classy! But It still involves a non-referentially transparent function.
itemToSearch
is still closed over by the lambda (i.e. it's not one of its arguments).Before I get into this - I really wouldn't do this in real life! It's fine that the lambda closes over
itemToSearch
. I'm only doing this because it's fun and I enjoy FP :D.But since you asked... one way of handling this - if you really, really only wanted pure functions everywhere - would be to pass
itemToSearch
as an argument and return thefriendFilter
function, essentially currying the function:Lambda and currying make a great way to add data into your functions as and when its needed.
small refactor:
stupid why-oh-why refactor:
Ridiculous, please-make-it-stop refactor
If you enjoy this madness, might I recommend reading some books about the Scheme programming language.
Haha nice, I actually work with Scala day to day and a lot of code ends up looking similar to the second last example (with types).
Thanks again mate :)
Thanks for sharing all your insights (all of you), I will have a closer look at them.