Parâmetros
- Parâmetros
Em geral, parâmetros/ argumentos de função (os termos são usados de forma intercambiável aqui) são um conceito fundamental.
Você usa argumentos para passar valores para uma função. A função pode então usar esses valores de par âmetro para diferentes propósitos - por exemplo, para exibi-los na tela, usá-los em um cálculo ou enviá-los para outra função.
Em Dart (e, portanto, em Flutter, já que ele usa Dart), existem dois tipos de parâmetros que você pode aceitar em funções:
- Posicionais: A posição de um argumento determina qual parâmetro recebe o valor.
void add(a, b) { // a & b são parâmetros posicionais
print(a + b); // print() é uma função embutida que será explicada mais tarde
}
add(5, 10); // 5 é usado como valor para a, porque é o primeiro argumento; 10 é usado como valor para b
- Nomeados: O nome de um argumento determina qual parâmetro recebe o valor.
void add({a, b}) { // a & b são parâmetros nomeados (por causa das chaves)
print(a + b);
}
add(b: 5, a: 10); // 5 é usado como valor para b, porque está atribuído a esse nome; 10 é usado como valor para a
Além do uso diferente, há uma diferença muito importante entre argumentos posicionais e nomeados: Por padrão, parâmetros posicionais são obrigatórios e não podem ser omitidos - por outro lado, argumentos nomeados são opcionais e podem ser omitidos.
No exemplo acima, ao usar parâmetros nomeados, você poderia chamar add() assim:
add();
ou
add(b: 5);
Ao usar parâmetros posicionais, chamar add() dessa maneira seria inválido e causaria um erro!
Você pode, no entanto, mudar esses comportamentos. Você pode tornar argumentos posicionais opcionais e argumentos nomeados obrigatórios.
Argumentos posicionais podem ser tornados opcionais colocando-os entre colchetes ([]):
void add(a, [b]) { // b é opcional
print(a + b);
}
Uma vez que um parâmetro é opcional, você também pode atribuir um valor padrão a ele - esse valor será usado se nenhum valor for fornecido para o argumento:
void add(a, [b = 5]) { // b é opcional, 5 será usado como valor padrão
print(a + b);
}
add(10); // b ainda seria 5 porque não foi sobrescrito
add(10, 6); // aqui, b seria 6
Valores padrão também podem ser atribuídos a parâmetros nomeados - que são opcionais por padrão:
void add({a, b = 5}) { // b tem um valor padrão de 5
print(a + b);
}
add(b: 10); // para b, 10 seria usado em vez de 5; a não tem valor padrão e seria "null" aqui => um tipo de valor especial que você aprenderá ao longo deste curso
Você também pode tornar parâmetros nomeados obrigatórios usando a palavra-chave embutida required:
void add({required a, required b}) { // a & b não são mais opcionais
print(a + b);
}