Higher Order Function in JavaScript

Higher Order Function in JavaScript

Source: Dev.to

The "Master Machine" Example ## Why this is a game-changer: ## The Power Tool Analogy: Attachments vs. Machines ## Conclusion: From Manual Labor to Master Engineering In my last post, we solved the "pain of the century" by using parameters as placeholders for our data. We learned that we don't need a fiveSquared and a sixSquared function; we just need one calculateSquare(num) function where num acts as a placeholder for any value. But we are still facing a tiny bit of "pain." Right now, our function is a specialist. It only knows how to square a number. But what if we want a function that is a generalist? What if we want to pass in a number and then decide if we want to square it, cube it, or even just double it? In this article, we are diving into Higher-Order Functions. This is where we stop just passing data (like numbers and strings) into functions and start passing operations (other functions) as placeholders. And if you're wondering how a function can be passed as a parameter in JavaScript In JavaScript, functions are first-class citizens. That means a function is just a value, like a number or a string, so it can be passed as a parameter to another function. The function being passed as an argument is often called a "Callback Function" In this article, we are diving into Higher-Order Functions. This is where we stop just passing data (like numbers and strings) into functions and start passing operations (other functions) as placeholders. Think of it like this: If a standard parameter is a placeholder for the ingredients, a Higher-Order Function allows us to leave a placeholder for the recipe itself! Check out this code. Notice how doMath doesn't know if it's adding or multiplying yet, it waits for us to tell it what to do! Do you see what happened there? We didn't have to write a doSquare function and a doDouble function. Instead, we wrote one Master Function (doMath) and left a placeholder for the operation. This is the ultimate level of the DRY principle. Now, we aren't just reusing data; we are reusing the entire structure of our code and simply swapping out the logic whenever we feel like it. No more "pain of the century", just clean, flexible code! The concept of Higher-Order Function is very important in JavaScript and its most popular frameworks like React If you haven't understood it yet or want to understand what problem Higher-Order Function is solving by analogy, then read further: Imagine you are working on a construction project. If you followed the "old way" (our fixed functions), you would have to buy a completely different, heavy machine for every single task. - You'd have one machine that only drills, If you ran out of room in your truck, that would be the "pain of the century!" Higher-Order Functions are like a Power Drill. The drill itself doesn't know what it's going to do yet. It just provides the power and the rotation. To make it useful, you plug in an attachment: By using this approach, you don't need to reinvent the "power" every time. You just change the attachment to change the operation! We've come a long way from the "pain of the century." We started with functions that were stuck doing one thing forever, moved to functions that could handle different data, and now we've mastered Higher-Order Functions, the power drills of the JavaScript world. By using placeholders for both your data and your logic, you are no longer just writing code; you are building systems. You've learned that: The next time you find yourself writing the same logic over and over, stop and ask yourself: "Can I turn this into a power tool?" If the answer is yes, you're well on your way to mastering JavaScript. Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse COMMAND_BLOCK: // 1. We define our "Mini-Machines" (Operations) const square = (n) => n * n; const double = (n) => n * 2; // 2. We define our "Master Machine" (The Higher-Order Function) // 'operation' is the placeholder for the logic we want to use! function doMath(num, operation) { return operation(num); } // 3. Now we can change the logic on the fly! console.log(doMath(5, square)); // Output: 25 console.log(doMath(5, double)); // Output: 10 Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: // 1. We define our "Mini-Machines" (Operations) const square = (n) => n * n; const double = (n) => n * 2; // 2. We define our "Master Machine" (The Higher-Order Function) // 'operation' is the placeholder for the logic we want to use! function doMath(num, operation) { return operation(num); } // 3. Now we can change the logic on the fly! console.log(doMath(5, square)); // Output: 25 console.log(doMath(5, double)); // Output: 10 COMMAND_BLOCK: // 1. We define our "Mini-Machines" (Operations) const square = (n) => n * n; const double = (n) => n * 2; // 2. We define our "Master Machine" (The Higher-Order Function) // 'operation' is the placeholder for the logic we want to use! function doMath(num, operation) { return operation(num); } // 3. Now we can change the logic on the fly! console.log(doMath(5, square)); // Output: 25 console.log(doMath(5, double)); // Output: 10 - one machine that only sands, and - one machine that only saws. - Plug in a drill bit, and you're making holes. - Plug in a sanding disc, and you're smoothing wood. - Plug in a screwdriver head, and you're fixing a cabinet. - The Drill is your Higher-Order Function. It’s the "Master Machine" that handles the work. - The Attachment is the Callback Function (the operation). It's the specific logic you swap in and out. - The Wood is your Data. It's the material you are working on. - Parameters make your data flexible. - Callbacks make your operations flexible. - Higher-Order Functions bring it all together to keep your code DRY and professional