Transcript from the "filter, map, & reduce Solution: map" Lesson
[00:00:55] So that's why we're using some of those more kind of traditional functional programming terms here. Okay, so how is this map exercise? Were we able to figure out a way to implement map without calling array.map? So what we have here is in my solution, I have a recursive implementation that has a base case of if my array is empty, I'm done.
[00:01:21] I return an empty array. I might also have another base case here of like, for example, if there's exactly one element in my array, I return an array with the function applied to that element, as well. And then otherwise, I'm going to return this recursive application. And again we might want to have like a function of concat instead of this concat method, but array dot.concat returns a new array with the two arrays mushed together, concatenated into a single array.
[00:01:55] So it's not going to change the original array, it's going to give me a new one. So that seems okay for our pure functional restrictions here. So what I'm gonna do is I'm gonna take the first thing out of the array, the head of the array. I'm gonna apply the function to it and get a little array started with that.
[00:02:15] And then concatenate whatever the array is that comes back when I recursively apply map with that same function to the rest of the items in the array which in functional land is often called the tail of the array. And be careful because tail does not mean the last element of the array.
[00:02:38] Which you might easily think because head is the first element, tail is a little different. So if head is a single value, tail is the whole rest of the array except for the head.
>> [INAUDIBLE] The bottom you used a double map. And then you pass an argument into it and so if you look at all the examples that I have seen is that it really say objects or array.map or array.filter.
[00:03:10] And so how come just like that, you got a consonant and then you assigned it to the map without using an array and things like that. How does that work?
>> Right, so I'm understanding the question right is how is this different from doing wholes.map with whatever the function is that I want to pass in, and why am I doing it this way, instead of this way?
[00:03:36] And so again, this is really just to build up our muscle memory, build up our habit of using a functional API where everything is functions. And we're not thinking about objects and their methods as ways of manipulating them. We're thinking about functions and what inputs they need. So in functional programming languages like Clojure, for example, the API for working with these things is often a lot more like what you see on the left here, where everything is functions and we pass in whatever arrays we're operating on.
[00:04:47] And so this is totally fine and if you prefer to work in that object-oriented style, go for it. I think that it's really useful to get in the habit of using this functional style mostly because it forces us to think about the functions before we think about the objects, if you know what I mean.
[00:05:06] And again, so it's about that mind shift. Sorry.
>> Yeah, I do understand. So usually when I use that object or in orientated method [INAUDIBLE] style. So [INAUDIBLE] I've seen what to do and I've seen that one. The way you use that array.marvel, array.filter. Well, yeah, I will try it out.
[00:05:32] Yeah, thank you.
[00:05:54] Getting into a new programming paradigm is really about changing the way you look at the world of the program. And so the reason we're focusing on these functions is really to force us to think about the world in terms of functions instead of thinking about it in terms of objects.
[00:06:10] Okay, great questions. And so hopefully these doubled and halved applications were pretty straightforward. But just again, to give you an idea of what kind of functions you can pass in then to these map functions. The challenge exercise if anybody got to it was to figure out what function you would have to pass to map to get an array that is essentially this game Fizz Buzz.
[00:06:40] If you haven't run into it before, there's a Wikipedia link, you can read about it. But essentially the rules are, if a number is divisible by three, you replace it with fizz. If a number is divisible by five, you replace it with buzz. If it's divisible by both three and five, it's fizz buzz.
[00:06:55] So what we have here is kind of a series of little checks which figure out whether or not is divisible by three or five. And then figure out which strings fizz or buzz, we need to replace the number with and then optionally putting them together if they are necessary, and otherwise just returning the plain old number.
[00:07:18] So that's one way you could solve this exercise again, there might be other really great solutions that would also solve this and produce the fizz buzz array we're looking for. But just a little mind bender there to see how we can use map to play games too.