Respuestas:
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 :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
salida:
length = 10, breath = 20, height = 30
>> Parámetro posicional opcional
el parámetro se revelará con corchetes [] y los parámetros 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
salida:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Parámetro con nombre opcional
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
salida:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Parámetro predeterminado opcional
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
salida:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
gracias por la clara explicación dada por este enlace de video, créditos para el creador del video.
enlace de video: OpcionalPositionalParameters
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:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
De doc obtenemos que ambos positional
y los named
parámetros son opcionales, lo que significa que todos pueden estar ausentes.
En mi opinión, los named
parámetros son más estrictos que positional
los. Por ejemplo, si declara dicho método:
String say({String from, String msg})
Arriba from
y msg
son named
parámetros, cuando llama al método say
debe usar say(from: "xx", msg: "xx")
. Las llaves no pueden estar ausentes.
Sin embargo, si utiliza parámetros posicionales, es libre.
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 Savaranaraja
Parámetros Posicionales:
Son los mismos que los parámetros predeterminados. Por ejemplo:
void add(int x, [int y = 3]);
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:
void sum({int num1, int num2});
Esta función se llama así:
sum(num1: 12, num2: 24);
Los parámetros también nombrados también pueden tener valores predeterminados.