Funções em Dart #2
Essa é a 2° parte da serie Dart
Como explicado no artigo anterior tudo em Dart é um objeto inclusive uma função que extends
da classe Function
e como objeto você pode passar uma função como argumento de outra função ou propriedade de algum objeto ou mesmo retornar uma função.
Em Java isso seria o equivalente a uma Interface Funcional(a partir do Java 8) que é uma interface que possui apenas uma função abstrata, o que permiti usarmos classes anonimas ou lambdas expressions. O uso de interfaces em Java tem um dos propósitos de definir um contrato, quais são os argumentos que a função irá receber e o seu tipo de retorno, em Dart isso é bem mais flexível, você não precisa mais de definir uma interface, basta a implementação da função obedecer os critérios de argumentos e tipo de retorno que irá ficar sussa.
Sintaxe
A estrutura de uma função é que nem a de outras linguagens.
TipoDeRetorno nomeDaFuncao(TipoDoArgumento nomeDoArgumento, OutroTipo outroNomeDeArgumento){
// Aqui vai o corpo da função
return tipoDeRetorn;
}
Porem com Dart você pode mais. Se sua função não retorna nada você pode definir o tipo de retorno como void
ou melhor não colocar nada, e tem mais, em funções mais simples você pode resumir para uma unica linha.
int multiplicacao(int valor1, int valor2)=> valor1 * valor2;mostraNoConsoleSoma(int v1, int v2) => print(v1+v2);
Argumentos Opcionais
Algumas vezes criamos funções que podem ou não precisar de alguns argumentos e em Dart você pode definir que os argumentos podem ser opcionais e claro definir valores padrão para o argumento caso nenhum valor seja definido na chamada da função.
Tem duas formas de fazer isso:
- Parâmetros nomeados opcional
Como o nome sugere, os parâmetros tem nomes e para passar algum valor para o parâmetro nomeado que é opcional é preciso indicar para qual parâmetro é aquele valor e a sintaxe é muito simplesnomeDoParam: valor, outroParam: outroValor
.
Vamos ao exemplo:
Mas Marcus e se eu quiser que no parâmetro opcional tenha um valor padrão?
Muito simples, basta atribuir um valor na declaração do parâmetro. Vai lá no DartPad e altere a linha 7 para que fique parecido com isso String sujeito = "Sem Nome"
e execute o código.
Agora quando você não atribui um valor para sujeito
, o Dart irá usar o valor padrão definido na criação da função. Legal não é?
- Parâmetros posicionados opcional
Muito parecido com os parâmetros nomeados que você pode declarar em qualquer ordem desde que indique o nome do parâmetro que o valor será atribuído, os parâmetros posicionados tem que seguir a ordem exata que foram declarados na função.
Exemplo();
Execute esse código no DartPart e veja o resultado.
Mas Marcus quando eu devo usar o nomeado ou o posicionado??
Depende, sugiro usar o nomeado quando sua função ou construtor da classe(que também é uma função), tiver muitos parâmetros. Quando estiver trabalhando com os Widgets do Flutter, você vai entender o que eu estou falando. E quando a função tiver poucos parâmetros opcionais use o posicionado.
Eu pessoalmente uso mais o nomeado porque facilita muito a leitura e entendimento do código.
A função main
Você deve ter reparados em alguns exemplos o uso da função main(){}
ela é o ponto de partida quando um app ou um script Dart é executado.
A função main
ela retorna nulo e pode receber uma lista de String
como parâmetro para quando você for usar o cmd ou terminal para executar algum app/script Dart o que for digitado vai ser passado como List<String>
a partir dai é só tratar cada String
.
P.S. Aqui vai um exemplo de função retornando outra função:
Que pode ser executado aqui.
E por hoje é só pessoal, me siga para saber quando publicar novos artigos.
O que tem achado dessa serie? Espero que esteja aprendendo.
Escreva aqui nos comentários suas duvidas, criticas ou sugestões.
- Tipos, Variáveis e Escopo
- >Funções
- Classes, Construtores e Enum
- Herança e Interfaces
- Fluxo de decisões if, else switch
- Listas e Mapas
- Funções da Lista
- Future e Stream
- RxDart
- Async await
- Generics
Me segue para saber quando algo novo sair.