<v ->Having learned how to define functions</v> and apply them in a couple of different contexts, in Lesson Six you're going to take your programming to the next level by learning the basics of functional programming, a style of programming that emphasizes, you guessed it, functions. This is a challenging lesson and you may have to watch it a couple of times to absorb everything, but the rewards are rich indeed. We'll be focusing on a triumvirate of functions commonly used in functional programming known as map, filter, and reduce. The first of our examples is the map function which lets us map a function over an array of elements. It's often a powerful alternative to looping. So far, we've been using a style of coding known as imperative programming but we'll see how to use map to take a five line loop and condense it to a single line. This sort of compression is common in functional programming. The second function we'll cover is filter which allows us to filter our data based on some Boolean criterion. This lets us run through an array and filter out anything that doesn't match our criterion. For example, we could take an array of integers and filter for only numbers evenly divisible by two giving us a quick way to select only the even numbers in the array. Our third function is the mighty reduce which is exactly the kind of powerful technique that can take lots of examples to really sink in but allows us to write remarkably clean and concise code. Because reduce and indeed all functional techniques can be challenging to understand even for experienced developers, it's especially powerful when combined with test driven development, which we'll cover in Lesson Eight, but first we need to learn how to define objects of our own.