Named and positional parameters in Dart
In Dart, we have two types of optional parameters: named and positional.
- Dart’s optional parameters are optional in that the caller isn’t required to specify a value for the parameter when calling the function.
- Optional parameters can only be declared after any required parameters.
- Optional parameters can have a default value, which is used when a caller does not specify a value.
Optional parameters are parameters which don’t have to be specified when calling given function. Optional parameters must be declared after required parameters. Additionally, optional parameters can have a default value, which is used once the function invocation doesn’t specify it.
👉Dart Cheat Sheet and Quick Reference
Positional Parameters in Dart
Square brackets [] are used to specify optional, positional parameters in Dart.
void hamViDu(int a, [int b = 0, int c = 0]) {
if (b != 0 && c != 0) {
print('a:$a - b:$b - c:$c');
} else if (b != 0) {
print('a:$a - b:$b');
} else {
print('a:$a');
}
}
void main() {
hamViDu(5, 10, 15);
print('----------------------');
hamViDu(5);
print('----------------------');
hamViDu(5, 10);
}
For such declaration a is always required while b and c are optional. Also, b, c will default to 0 if not specified.
hamViDu(5, 10, 15); //print a:5 - b:10 - c:15 hamViDu(5); //print a:5 hamViDu(5, 10);//print a:5 - b:10
Additionally, the parameter names are specified and visible only at the level of the function declaration. The function caller must know which position corresponds to which parameter. This leads to a slightly less readable code.
Named parameters in Dart
Curly brackets {} are used to specify optional, named parameters in Dart.
readFile(String name, {String mode, String charset = 'utf-8'}) {
//......
}
Named parameters are referenced by name, which means that they can be used during the function invocation in an order different from the function declaration.
void hamViDu({int a = 0, int b = 0, int c = 0}) {
print('a:$a - b:$b - c:$c');
}
void main() {
hamViDu();
print('----------------------');
hamViDu(a: 5, c: 15, b: 10);
print('----------------------');
hamViDu(c: 5);
print('----------------------');
hamViDu(b: 5, c: 10);
}
Checking if optional parameter was provided
Unfortunately, you cannot distinguish between the cases “an optional parameter was not provided” and “an optional parameter was provided with the default value”.
Note: You may use positional optional parameters or named optional parameters, but not both in the same function or method. The following is not allowed.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}

Leave a Reply