Higher-Order Functions in Dart
A Higher-Order Function is a function that either:
- Takes another function as a parameter.
- Returns a function.
These functions help make code more concise and reusable.
1. Passing a Function as a Parameter
You can pass a function as an argument to another function.
void greet(String name, Function message) {
print("Hello, $name!");
message();
}
void sayGoodMorning() {
print("Good morning! Have a great day.");
}
void main() {
greet("Alice", sayGoodMorning);
}
Output:
Hello, Alice!
Good morning! Have a great day.
2. Returning a Function
A function can also return another function.
Function multiplier(int n) {
return (int x) => x * n;
}
void main() {
var doubleIt = multiplier(2); // Returns a function that multiplies by 2
print(doubleIt(5)); // Output: 10
}
3. Using Anonymous Functions (Lambda)
Dart allows passing anonymous functions instead of named functions.
void main() {
List numbers = [1, 2, 3, 4, 5];
numbers.forEach((num) {
print(num * 2);
});
}
Output:
2
4
6
8
10
4. Using map, where, reduce, and fold
Dart provides built-in higher-order functions like map, where, reduce, and fold.
Example: Using map to Transform a List
void main() {
List numbers = [1, 2, 3, 4];
var squaredNumbers = numbers.map((n) => n * n).toList();
print(squaredNumbers); // Output: [1, 4, 9, 16]
}
Example: Using where to Filter a List
void main() {
List numbers = [10, 15, 20, 25, 30];
var evenNumbers = numbers.where((n) => n % 2 == 0).toList();
print(evenNumbers); // Output: [10, 20, 30]
}
Key Benefits of Higher-Order Functions
- Code Reusability – Functions can be reused dynamically.
- Conciseness – Reduces boilerplate code.
- Flexibility – Enables functional programming techniques.
Higher-order functions make Dart more powerful and expressive! 🚀
Comments
Post a Comment