In Dart, anonymous functions (also known as lambda expressions or function literals) are functions that don't have a name. These functions are used when a short, self-contained function is needed temporarily, such as when passing a function as an argument to another function.
An anonymous function is defined like a normal function but without a name.
Syntax-
(parameterList) {
// Function body
};
A lambda (or arrow function) is a shorter syntax for an anonymous function. It's used when the function has a single expression.
The syntax uses => instead of {}.
Syntax-
(parameterList) => expression;
1. Assigning to a Variable
You can assign an anonymous function to a variable and call it later.
void main() {
var printMessage = (String message) {
print("Message: $message");
};
printMessage("Hello, Dart!"); // Output: Message: Hello, Dart!
}
2. Passing to a Higher-Order Function
Anonymous functions are often passed to higher-order functions like forEach or map.
void main() {
var numbers = [1, 2, 3, 4];
numbers.forEach((number) {
print("Number: $number");
});
}
1. Assigning a Lambda to a Variable
You can use the shorthand syntax to create concise one-line functions.
void main() {
var square = (int number) => number * number;
print(square(4)); // Output: 16
}
2. Using with a Higher-Order Function
Lambdas are especially useful for one-liners passed to higher-order functions.
void main() {
var numbers = [1, 2, 3, 4];
// Using lambda inside forEach
numbers.forEach((number) => print("Number: $number"));
// Using lambda with map
var squaredNumbers = numbers.map((number) => number * number).toList();
print(squaredNumbers); // Output: [1, 4, 9, 16]
}
Anonymous functions: When the logic requires multiple statements or conditions.
Lambdas: When the function is a simple one-liner.
void main() {
var greet = (String name) {
print("Hello, $name!");
};
greet("Alice"); // Output: Hello, Alice!
}
void main() {
var square = (int number) => number * number;
print(square(4)); // Output: 16
}
void main() {
var names = ["Alice", "Bob", "Charlie"];
names.forEach((name) {
print("Name: $name");
});
}
void main() {
var numbers = [1, 2, 3];
var doubled = numbers.map((n) => n * 2).toList();
print(doubled); // Output: [2, 4, 6]
}
void main() {
var numbers = [1, 2, 3, 4];
var evens = numbers.where((n) => n.isEven).toList();
print(evens); // Output: [2, 4]
}
void main() {
var numbers = [1, 2, 3];
var sum = numbers.reduce((a, b) => a + b);
print(sum); // Output: 6
}
void main() {
var printIfEven = (int number) {
if (number.isEven) print("Even: $number");
};
printIfEven(4); // Output: Even: 4
printIfEven(5); // No output
}
Function multiplier(int factor) => (int number) => number * factor;
void main() {
var triple = multiplier(3);
print(triple(4)); // Output: 12
}
void main() {
var fruits = ["apple", "banana", "cherry"];
fruits.sort((a, b) => b.compareTo(a));
print(fruits); // Output: [cherry, banana, apple]
}
void main() {
var numbers = [1, 2, 3];
var product = numbers.fold(1, (prev, element) => prev * element);
print(product); // Output: 6
}
void main() {
var isEven = (int n) => n % 2 == 0;
print(isEven(4)); // Output: true
print(isEven(5)); // Output: false
}
void main() {
var add = (int a, int b) => a + b;
var multiply = (int a, int b) => a * b;
print(add(2, 3)); // Output: 5
print(multiply(2, 3)); // Output: 6
}
import 'dart:async';
void main() {
Timer(Duration(seconds: 2), () {
print("Timer executed!");
});
}
List<int> transform(List<int> numbers, int Function(int) operation) {
return numbers.map(operation).toList();
}
void main() {
var numbers = [1, 2, 3];
var doubled = transform(numbers, (n) => n * 2);
print(doubled); // Output: [2, 4, 6]
}
void main() {
var calculate = (int x) {
return (int y) => x + y;
};
var addFive = calculate(5);
print(addFive(3)); // Output: 8
}
void main() {
var numbers = [1, 2, 3];
var hasEven = numbers.any((n) => n.isEven);
print(hasEven); // Output: true
}
void main() {
var numbers = [2, 4, 6];
var allEven = numbers.every((n) => n.isEven);
print(allEven); // Output: true
}
void main() {
var names = ["Alice", "Bob", "Charlie"];
var filtered = names.where((name) => name.startsWith("A")).toList();
print(filtered); // Output: [Alice]
}
List<int> filter(List<int> numbers, bool Function(int) condition) {
return numbers.where(condition).toList();
}
void main() {
var result = filter([1, 2, 3, 4], (n) => n > 2);
print(result); // Output: [3, 4]
}
void main() {
var formatString = (String input) => "Formatted: ${input.toUpperCase()}";
print(formatString("hello")); // Output: Formatted: HELLO
}
Program 10: Working with Functions
void main() {
// Function declaration
int add(int a, int b) {
return a + b;
}
// Function call
int result = add(5, 3);
print('Result: $result');
// Anonymous function
var multiply = (int a, int b) => a * b;
print('Multiply: ${multiply(4, 5)}');
}