Optional Positional Parameters
Wrap parameters in square brackets [ ] to make them optional. Optional positional parameters must come after required ones:
String greet(String name, [String greeting = 'Hello']) {
return '$greeting, $name!';
}
void main() {
print(greet('Alice')); // Hello, Alice!
print(greet('Bob', 'Welcome')); // Welcome, Bob!
}
Optional Named Parameters
Wrap parameters in curly braces { } to make them named. Named parameters can be passed in any order:
void createUser({String name = 'Guest', int age = 0, String role = 'user'}) {
print('Name: $name | Age: $age | Role: $role');
}
void main() {
createUser();
createUser(name: 'Alice', age: 25);
createUser(role: 'admin', name: 'Bob', age: 30);
}
Output:Name: Guest | Age: 0 | Role: user
Name: Alice | Age: 25 | Role: user
Name: Bob | Age: 30 | Role: admin
Default Values
Both positional and named optional parameters support default values:
double power(double base, [int exponent = 2]) {
double result = 1;
for (int i = 0; i < exponent; i++) result *= base;
return result;
}
print(power(3)); // 9.0 (3^2)
print(power(3, 3)); // 27.0 (3^3)
Example
void main() {
// Build a formatted message
print(buildMessage('Error'));
print(buildMessage('Success', emoji: '✅'));
print(buildMessage('Warning', emoji: '⚠️', repeat: 3));
}
String buildMessage(String msg, {String emoji = '❌', int repeat = 1}) {
return ('$emoji $msg ' * repeat).trim();
}
Output:❌ Error
✅ Success
⚠️ Warning ⚠️ Warning ⚠️ Warning
🧠 Quiz
1. How do you define optional positional parameters?
- A) (param)
- B) {param}
- C) [param] ✅
- D) <param>
2. Can named parameters be passed in any order?
- A) No, must match declaration order
- B) Yes ✅
- C) Only if they have defaults
- D) Only for two parameters
Summary
Optional positional parameters use [ ] and must follow required parameters. Optional named parameters use { } and can be passed in any order. Both support default values. Use named parameters for clarity when a function has many optional arguments.