Functions and Records
Optional Positional Parameters
Optional positional parameters live in [...]. They keep call sites short when the extra value has a natural default, but callers can still pass the value by position when they need different behavior.
Program
Play the program to call one formatter with its default suffix and again with an explicit suffix.
optional_positional.dart
Replay: real traced execution (multi-file project)
String label(String name, [String suffix = '!']) {
return '$name$suffix';
}
void main() {
var name = 'Ada';
var normal = label(name);
var excited = label(name, '!!');
print('$normal / $excited');
}
String label(String name, [String suffix = '!']) {
return '$name$suffix';
}
void main() {
var name = 'Lin';
var normal = label(name);
var excited = label(name, '!!');
print('$normal / $excited');
}
String label(String name, [String suffix = '!']) {
return '$name$suffix';
}
void main() {
var name = 'Mina';
var normal = label(name);
var excited = label(name, '!!');
print('$normal / $excited');
}
name ← Ada
5void main() {6 var name = 'Ada';7 var normal = label(name);values this stepAdanamecall ← label(Ada)
6var name = 'Ada';7var normal = label(name);8var excited = label(name, '!!');values this steplabel(Ada)callAdanamereturn value ← Ada!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepAda!return valueAdaname!suffixnormal ← Ada!
6var name = 'Ada';7var normal = label(name);8var excited = label(name, '!!');values this stepAda!normalcall ← label(Ada, !!)
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this steplabel(Ada, !!)callAdanamereturn value ← Ada!!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepAda!!return valueAdaname!!suffixexcited ← Ada!!
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this stepAda!!excitedprint('$normal / $excited');
8 var excited = label(name, '!!');9 print('$normal / $excited');10}outputAda! / Ada!!values this stepAda!normalAda!!excited
name ← Lin
5void main() {6 var name = 'Lin';7 var normal = label(name);values this stepLinnamecall ← label(Lin)
6var name = 'Lin';7var normal = label(name);8var excited = label(name, '!!');values this steplabel(Lin)callLinnamereturn value ← Lin!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepLin!return valueLinname!suffixnormal ← Lin!
6var name = 'Lin';7var normal = label(name);8var excited = label(name, '!!');values this stepLin!normalcall ← label(Lin, !!)
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this steplabel(Lin, !!)callLinnamereturn value ← Lin!!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepLin!!return valueLinname!!suffixexcited ← Lin!!
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this stepLin!!excitedprint('$normal / $excited');
8 var excited = label(name, '!!');9 print('$normal / $excited');10}outputLin! / Lin!!values this stepLin!normalLin!!excited
name ← Mina
5void main() {6 var name = 'Mina';7 var normal = label(name);values this stepMinanamecall ← label(Mina)
6var name = 'Mina';7var normal = label(name);8var excited = label(name, '!!');values this steplabel(Mina)callMinanamereturn value ← Mina!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepMina!return valueMinaname!suffixnormal ← Mina!
6var name = 'Mina';7var normal = label(name);8var excited = label(name, '!!');values this stepMina!normalcall ← label(Mina, !!)
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this steplabel(Mina, !!)callMinanamereturn value ← Mina!!
1String label(String name, [String suffix = '!']) {2 return '$name$suffix';3}values this stepMina!!return valueMinaname!!suffixexcited ← Mina!!
7var normal = label(name);8var excited = label(name, '!!');9print('$normal / $excited');values this stepMina!!excitedprint('$normal / $excited');
8 var excited = label(name, '!!');9 print('$normal / $excited');10}outputMina! / Mina!!values this stepMina!normalMina!!excited
optional positional
`[String suffix = '!']` makes the second argument optional while keeping positional call syntax.
default value
`label(name)` uses the default suffix because the caller passes only the required `name`.
explicit value
`label(name, '!!')` overrides the default by passing the optional argument in the second position.