A positional parameter is linked by its position. Positional parameters must be specified in the order in which they appear. Named parameters are specified by assigning values to their names. named parameters can be assigned initial values by using their names.
Dart supports named parameters. Named means that when you call a function, you attach the argument to a label. Calling that function would look like this: debugger(message: 'A bug!
Positional and Named argument in Flutter We call them arguments or parameters, whichever you like. Dart is so flexible, it gives ample opportunity to the developers to manipulate the parameters. We may use the default parameters, in such cases, you need to pass the parameters. That is compulsory.
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.
Dart has two types of optional parameters: named and positional. Before I discuss the differences, let me first discuss the similarities.
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.
Positional optional parameters
A parameter wrapped by [ ]
is a positional optional parameter. Here is an example:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
In the above code, port
is optional and has a default value of 80
.
You can call getHttpUrl
with or without the third parameter.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
You can specify multiple positional parameters for a function:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
The optional parameters are positional in that you can't omit port
if you want to specify numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Of course, unless you know what 8080 and 5 are, it's hard to tell what those apparently magic numbers are. You can use named optional parameters to create more readable APIs.
Named optional parameters
A parameter wrapped by { }
is a named optional parameter. Here is an example:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
You can call getHttpUrl
with or without the third parameter. You must use the parameter name when calling the function.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
You can specify multiple named parameters for a function:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Because named parameters are referenced by name, they can be used in an order different from their declaration.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
I believe named parameters make for easier-to-understand call sites, especially when there are boolean flags or out-of-context numbers.
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!
}
In Dart with my understanding, method parameter can be given in two type.
>> Required Parameter
Required parameter is a well know old style parameter which we all familiar with it
example:
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
output:
length = 10, breath = 20, height = 30
>> Optional Positional Parameter
parameter will be disclosed with square bracket [ ] & square bracketed parameter are optional.
example:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
output:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Optional Named Parameter
example:
findVolume(int length, int breath, {int height}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid
output:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Optional Default Parameter
example:
findVolume(int length, int breath, {int height=10}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid
findVolume(10,20);//valid
output:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
thanks for the clear explanation given from this video link, credits to the video creator.
video link : OptionalPositionalParameters
video link : OptionalNamedParameters
video link : OptionalDefaultParameters
Positional Parameters:
They are same as default parameters. For example:
void add(int x, [int y = 3]);
Here y has the default value of 3
Named Parameters:
These are parameters that can be passed in any order by passing the name of the parameter followed by the passed value. For example:
void sum({int num1, int num2});
This function is called like this:
sum(num1: 12, num2: 24);
Also named parameters can also have default values.
When the parameter of a function is specified using "paramName : value" syntax, then it is a named parameter. Such parameters can be rendered optional by enclosing them between [ and ] brackets. A rudimentary demonstration of this function can be demonstrated in the following Hello World program:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With