Many developers that I have lately interacted with associate map-reduce-filter with functional programming, and they are actually dreaded by the co...
For further actions, you may consider blocking this person and/or reporting abuse
You could simplify your JavaScript solution!
I definitely prefer chained expressions c:
Many devs are probably already familiar with map/filter/reduce, but they know it in a different form: SQL.
Once I realized that, it seemed only natural that the same capabilities be available in my programming language for in-memory collections too. You could already do them in
for
loops of course, but adding these explicit operations to the language saves the code and mental weight from the overhead of the loop. And more importantly, it makes the commonly-performed operation obvious, whereas afor
loop has to be read line-by-line to make sure of what it is doing.When working with
map
and friends, you usually want to use iterators/generators/enumerators/streams/whatever-they-are-called-in-your-language-of-choice instead of lists. You are only going to iterate them once - it's wasteful to allocate memory for it when these combinators can usually read it one value at a time and "pass" the value they emit to the next combinator.If we take your Python example:
This allocates a list to hold your 10 numbers - which is redundant, because
map
can just read them one at a time. This is better:(i for i in range(10))
will not allocate a list for holding all 10 numbers. Instead, it will create an iterator that generates the next number on demand. With 10 numbers the difference is neglectable - but when you need to handle larger lists it can be quite serious, and the syntax for doing it the right way is easy.This holds for other languages too - each with it's own syntax/api.
Even
is excessive if you're using a comprehension anyway.
Your version doesn't do the job though...
It doesn't? What's the difference?
The purpose of the original snippet was to demonstrate the
map
combinator. Your version doesn't do it.It seems, though, like it doesn't improve things in all languages: stackoverflow.com/q/47653131/794380
Also important to note that both
map
andfilter
can be redundant if you're already usingreduce
. Your JavaScript example could be written like this:Obviously this doesn't demonstrate what
map
andfilter
do, which is less useful from that perspective! The big deal about it is that it only makes one pass. This doesn't matter much with ten elements but with bigger collections it can save a lot of time.Totally agree Dian :)
Just to register another way to write the same, I would code like this:
Regards!
for the sake of completeness, if we were interested in the total sum and are not concerned about making our code follow functional programming methods, we could rewrite the python one liner as:
:)
You don't have to ignore language constructs to "follow functional programming methods". In Haskell, for example, you can use the combinators:
Or you can use list comprehension(like in Python):
The second approach is also functional programming.
That single line explained more of map-filter-reduce than the articles I've been reading has! Not directed at the author, to be clear, it was a genuinely great article--I just have been puzzling over it because something has been tripping around in my brain and BAM, this comment did it. My bachelor's is in math and so the map-filter-reduce descriptions sounded so close and yet so far to what I kept almost thinking and that particular one-line tripped the right memory circuits!
Is there something I missed that I could have done better?
I tried to make it as simple as possible, and I'm sorry if it did not simplify things for you.
No, not at all! I tried to make that clear, and failed. Your article was wonderfully written--it's just a topic that I've been chewing on for awhile and has eluded me, and that random one-liner reminded me of past math classes and was the final link, as it were. I really loved your piece!
Java 8+
Scala
Note: Both Java and Scala have
sum
methods on these objects which would be equivalent thereduce
I used above.Is scala popular now?
Ruby version can be written as:
I'm more dreaded by fold_left/ fold_right than map, flatmap, reduce, reduce_right, reduce_left, filter and groupby