Si encuentras alguna parte que no comprendes puedes dejarlo en los comentarios y trataremos de ayudarte lo más rápido posible.
Solución:
Dart tiene dos tipos de parámetros opcionales: nombrada y posicional. Antes de discutir las diferencias, permítanme primero discutir las similitudes.
Los parámetros opcionales de Dart son Opcional ya que no se requiere que la persona que llama especifique un valor para el parámetro cuando llama a la función.
Los parámetros opcionales solo se pueden declarar después de los parámetros obligatorios.
Los parámetros opcionales pueden tener un valor predeterminado, que se utiliza cuando una persona que llama no especifica un valor.
Parámetros opcionales posicionales
Un parámetro envuelto por [ ]
es un parámetro opcional posicional. Aquí hay un ejemplo:
getHttpUrl(String server, String path, [int port=80])
// ...
En el código anterior, port
es opcional y tiene un valor predeterminado de 80
.
Puedes llamar getHttpUrl
con o sin el tercer parámetro.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Puede especificar varios parámetros posicionales para una función:
getHttpUrl(String server, String path, [int port=80, int numRetries=3])
// ...
Los parámetros opcionales son posicional en eso no puedes omitir port
si quieres especificar numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Por supuesto, a menos que sepa qué son 8080 y 5, es difícil saber cuáles son esos números aparentemente mágicos. Puedes usar parámetros opcionales nombrados para crear API más legibles.
Parámetros opcionales nombrados
Un parámetro envuelto por
es un parámetro opcional con nombre. Aquí hay un ejemplo:
getHttpUrl(String server, String path, int port = 80)
// ...
Puedes llamar getHttpUrl
con o sin el tercer parámetro. Ustedes deber use el nombre del parámetro cuando llame a la función.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Puede especificar varios parámetros con nombre para una función:
getHttpUrl(String server, String path, int port = 80, int numRetries = 3)
// ...
Debido a que los parámetros con nombre se referencian por su nombre, se pueden usar en un orden diferente al de su declaración.
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);
Creo que los parámetros con nombre facilitan la comprensión de los sitios de llamadas, especialmente cuando hay indicadores booleanos o números fuera de contexto.
Comprobando si se proporcionó un parámetro opcional
Desafortunadamente, no puede distinguir entre los casos “no se proporcionó un parámetro opcional” y “se proporcionó un parámetro opcional con el valor predeterminado”.
Nota: Puede utilizar parámetros opcionales posicionales o parámetros opcionales nombrados, pero no ambos en la misma función o método. No se permite lo siguiente.
thisFunctionWontWork(String foo, [String positonal], String named)
// will not work!
En Dart, según tengo entendido, el parámetro del método se puede dar en dos tipos.
- Parámetro requerido
- Parámetro opcional (posicional, con nombre y predeterminado)
>> Parámetro requerido
El parámetro obligatorio es un parámetro de estilo antiguo bien conocido con el que todos estamos familiarizados
ejemplo:
findVolume(int length, int breath, int height)
print('length = $length, breath = $breath, height = $height');
findVolume(10,20,30);
producción:
length = 10, breath = 20, height = 30
>> Parámetro posicional opcional
El parámetro se mostrará con corchetes. [ ] & el parámetro entre corchetes son opcionales.
ejemplo:
findVolume(int length, int breath, [int height])
print('length = $length, breath = $breath, height = $height');
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
producción:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Parámetro con nombre opcional
- el parámetro se mostrará con corchete
- Los parámetros entre corchetes son opcionales.
- tienes que usar el nombre del parámetro para asignar un valor que se separa con colan :
- en el orden de los parámetros entre corchetes no importa
- Estos parámetros de tipo nos ayudan a evitar confusiones al pasar el valor de una función que tiene muchos parámetros.
ejemplo:
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
producción:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Parámetro predeterminado opcional
- Igual que el parámetro con nombre opcional, además, podemos asignar un valor predeterminado para este parámetro.
- lo que significa que no se pasa ningún valor, se tomará este valor predeterminado.
ejemplo:
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
producción:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
gracias por la clara explicación dada desde este enlace de video, créditos para el creador del video.
enlace de video: OptionalPositionalParameters
enlace de video: OptionalNamedParameters
enlace de video: OptionalDefaultParameters
Cuando el parámetro de una función se especifica usando la sintaxis “paramName: value”, entonces es un parámetro con nombre. Dichos parámetros se pueden convertir en opcionales encerrándolos entre [ and ] soportes. Se puede hacer una demostración rudimentaria de esta función en el siguiente programa Hello World:
sayHello([String name = ' World!'])
print('Hello, $name');
void main()
sayHello('Govind');