Funções em Dart #2

Marcus Eduardo Motta Duarte
3 min readOct 31, 2018

--

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 simples nomeDoParam: 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.

--

--