Kotlin Higher-Order Functions: Functions That Take Functions! 🚀

 

Kotlin Higher-Order Functions: Functions That Take Functions! 🚀

Imagine you’re at a coffee shop ☕, and the barista asks:

"How would you like your coffee?"

You can choose:
✅ Black Coffee ☕
✅ With Sugar 🍬
✅ With Milk 🥛
✅ Both Sugar & Milk 🍶

The coffee-making process remains the same, but you pass a custom instruction (how you want it).

That’s exactly how higher-order functions work in Kotlin!


📌 In this blog, we’ll explore:

✅ What are Higher-Order Functions? 🤔
✅ Passing Functions as Parameters 🔄
✅ Returning Functions from Functions 🚀
✅ Using Lambda Expressions for Simplicity ✨
✅ Real-World Examples 🌍


1️⃣ What is a Higher-Order Function? 🤔

A higher-order function is a function that takes another function as a parameter or returns a function.

📌 Why is this useful?

  • Helps in writing cleaner, reusable, and modular code.
  • Allows dynamic behavior (just like ordering custom coffee ☕).
  • Used in functional programming to process collections efficiently.

2️⃣ Passing Functions as Parameters 🔄

We can pass one function as an argument to another function!

🔹 Example: Performing a Math Operation

fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)  // Calls the passed function
}

// Different operations
val add = { x: Int, y: Int -> x + y }
val multiply = { x: Int, y: Int -> x * y }

// Using higher-order function
println(calculate(5, 3, add))       // Output: 8
println(calculate(5, 3, multiply))  // Output: 15

📌 Here’s what happens:

  1. calculate(5, 3, add) calls add(5, 3), which returns 8.
  2. calculate(5, 3, multiply) calls multiply(5, 3), which returns 15.

✅ Same function, different behaviors!


3️⃣ Returning a Function from a Function 🚀

A higher-order function can also return another function.

🔹 Example: Getting a Discount Function

fun getDiscountFunction(type: String): (Double) -> Double {
    return when (type) {
        "student" -> { price -> price * 0.9 }  // 10% off
        "senior" -> { price -> price * 0.85 }  // 15% off
        else -> { price -> price }  // No discount
    }
}

val studentDiscount = getDiscountFunction("student")
println(studentDiscount(100.0))  // Output: 90.0

val seniorDiscount = getDiscountFunction("senior")
println(seniorDiscount(100.0))  // Output: 85.0

📌 Explanation:

  • The function returns another function based on the discount type.
  • We store the function in studentDiscount or seniorDiscount.
  • Calling studentDiscount(100.0) applies a 10% discount.

✅ Dynamic pricing logic with functions!


4️⃣ Using Lambda Expressions for Simplicity ✨

Instead of writing long function definitions, we can use lambda expressions for shorter, cleaner code.

🔹 Example: Sorting a List with a Lambda

val numbers = listOf(3, 1, 4, 2)

val sortedNumbers = numbers.sortedBy { it }  // Lambda for sorting
println(sortedNumbers)  // Output: [1, 2, 3, 4]

📌 Instead of defining a separate function, we use { it } as a quick function.

✅ Less code, same power!


5️⃣ Real-World Use Cases 🌍

🔹 1. Filtering a List

val words = listOf("Kotlin", "Java", "C++", "Python")

val longWords = words.filter { it.length > 4 }
println(longWords)  // Output: [Kotlin, Python]

✅ Higher-order functions like filter simplify list processing!


🔹 2. Mapping Values in a List

val numbers = listOf(1, 2, 3, 4)

val squaredNumbers = numbers.map { it * it }
println(squaredNumbers)  // Output: [1, 4, 9, 16]

✅ Easier than writing a loop!


🔹 3. Custom Sorting with Higher-Order Functions

val names = listOf("John", "Alice", "Bob")

val sortedByLength = names.sortedBy { it.length }
println(sortedByLength)  // Output: [Bob, John, Alice]

✅ Higher-order functions help in sorting based on custom logic!


🔟 Conclusion: Functions Inside Functions! 🎯

✅ Higher-order functions allow us to pass and return functions.
✅ Lambdas make code cleaner and more readable.
✅ They are widely used in list processing, sorting, filtering, and more.
✅ They help in writing modular, reusable, and dynamic code.

Now go ahead and experiment with Kotlin higher-order functions in your projects! 🚀

💬 Which part did you like the most? Let me know in the comments! ⬇️😊

Thanks a lot for query or your valuable suggestions related to the topic.

Previous Post Next Post

Contact Form