Dart admite parámetros opcionales con nombre y parámetros opcionales posicionales. ¿Cuáles son las diferencias entre los dos?
Además, ¿cómo puede saber si realmente se especificó un parámetro opcional?
Dart tiene dos tipos de parámetros opcionales: nombrados y posicionales . Antes de discutir las diferencias, permítanme discutir primero las similitudes.
Los parámetros opcionales de Dart son opcionales porque la persona que llama no necesita especificar un valor para el parámetro cuando llama a la función.
Los parámetros opcionales solo se pueden declarar después de cualquier parámetro requerido.
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
.
Puede 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 múltiples parámetros posicionales para una función:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
Los parámetros opcionales son posicionales en el sentido de que no puede omitir port
si desea 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. Puede usar parámetros opcionales con nombre 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}) {
// ...
}
Puede llamar getHttpUrl
con o sin el tercer parámetro. Usted debe utilizar el nombre del parámetro cuando se llama 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 nombrados están referenciados por nombre, pueden usarse 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 hacen que los sitios de llamadas sean más fáciles de entender, 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 usar parámetros opcionales posicionales o parámetros opcionales con nombre, pero no ambos en la misma función o método. Lo siguiente no está permitido.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
lugar de:
, de acuerdo con dartlang.org/guides/language/… .En Dart, según tengo entendido, el parámetro método se puede dar en dos tipos.
>> Parámetro requerido
El parámetro requerido es un parámetro de estilo antiguo bien conocido que todos conocemos
ejemplo :
salida:
>> Parámetro posicional opcional
el parámetro se revelará con corchetes [] y los parámetros entre corchetes son opcionales.
ejemplo:
salida:
>> Parámetro con nombre opcional
ejemplo:
salida:
>> Parámetro predeterminado opcional
ejemplo:
salida:
gracias por la clara explicación dada por este enlace de video, créditos para el creador del video.
enlace de video: OpcionalPositionalParameters
enlace de video: OpcionalNamedParameters
enlace de video: OpcionalDefaultParameters
fuente
Cuando el parámetro de una función se especifica utilizando la sintaxis "paramName: value", entonces es un parámetro con nombre. Dichos parámetros pueden hacerse opcionales encerrándolos entre [y] paréntesis. Se puede demostrar una demostración rudimentaria de esta función en el siguiente programa Hello World:
fuente
De doc obtenemos que ambos
positional
y losnamed
parámetros son opcionales, lo que significa que todos pueden estar ausentes.En mi opinión, los
named
parámetros son más estrictos quepositional
los. Por ejemplo, si declara dicho método:Arriba
from
ymsg
sonnamed
parámetros, cuando llama al métodosay
debe usarsay(from: "xx", msg: "xx")
. Las llaves no pueden estar ausentes.Sin embargo, si utiliza parámetros posicionales, es libre.
fuente
Named
los parámetros se llaman así porque realmente puede identificarlos por nombre y no por posición (si cambia la posición de dos parámetros con nombre, no importa). Vea la respuesta anterior de SavaranarajaParámetros Posicionales:
Son los mismos que los parámetros predeterminados. Por ejemplo:
Aquí y tiene el valor predeterminado de 3
Parámetros nombrados:
Estos son parámetros que se pueden pasar en cualquier orden pasando el nombre del parámetro seguido del valor pasado. Por ejemplo:
Esta función se llama así:
Los parámetros también nombrados también pueden tener valores predeterminados.
fuente