Guia do artigo:
Default param
Permite definir um valor pr�-definido caso o par�metro n�o seja preenchido ou receba o valor undefined.
Vis�o geral
Em uma fun��o em JavaScript ou qualquer outra linguagem de programa��o � comum a necessidade de escrever fun��es que possuam algum tipo de valor pr�-definido em alguns de seus argumentos, por exemplo:
function createElement (tag, props = {}) {
console.log(tag, props)
...
}
createElement('p')
// p {}
createElement('p', { className: 'text textarea', children: 'Design for Human' })
// p { classNames: 'text textarea', children: 'Design for Human' }Neste exemplo a fun��o createElement recebe uma string como o nome do elemento que dever� ser criado e em seguida opcionalmente � informado os propriedades deste elemento, perceba que quando nenhuma props e definida a fun��o define o valor do argumento como um objeto vazio.
Sintaxe
(parametro [ = valor-padrao ]) => instrucaoNa pr�tica
Exemplo 1
Neste exemplo utilizamos a fun��o soma e atribu�mos a seus par�metros valores pr�-definidos caso n�o sejam preenchidos.
function total (a = 10, b = 20) {
return a + b
}
console.log(total()) // 30
console.log(total(5, 5)) // 10Exemplo 2
� poss�vel definir valores pr�-definidos para arrow function como no exemplo abaixo:
const addMensagem = (mensagem, data = Date.now()) => ({
mensagem,
data
})
console.log(addMensagem('Oi, tudo bem?')) // { mensagem: "Oi, tudo bem?", data: 1532978959897 }Exemplo 3
� poss�vel definir valores padr�o para par�metros a partir de fun��es como no exemplo abaixo:
function getTotalNotificacoes () {
...
}
function notificar (mensagem = getTotalNotificacoes()) {
return 'total de notifica��es: ' + mensagem
}
console.log(notificar()) // total de notifica��es: 4Exemplo 4
� poss�vel tamb�m utilizar os par�metros pr�-definidos em m�todos de classes, no exemplo abaixo podemos ver melhor como este recurso do JavaScript � utilizado.
class Pessoa {
constructor (nome, cpf= '999.999.999-99') {
this.nome = nome
this.cpf = cpf
}
}
const p1 = new Pessoa('bruno')
console.log(p1.cpf) // 999.999.999-99Exemplo 5
Neste exemplo temos uma fun��o que calcula o pagamento de um associado, caso n�o seja informado o valor de comiss�o e desconto, o mesmo ser� definido como zero e desconsiderado.
/**
* Esta fun��o calcula a comiss�o e desconto de um associado
*
* @param bruto valor bruto de pagamento
* @param [comissao] porcentagem (%) de comiss�o
* @param [desconto] porcentagem (%) de desconto
* @returns
*/
function calculaPagamento (bruto, comissao = 0, desconto = 0) {
let total = bruto
// adiciona ao total o valor da comiss�o
if (comissao > 0) {
total += (bruto / 100) * comissao
}
// remove o valor que dever� ser descontado
if (desconto > 0) {
total -= (bruto / 100) * desconto
}
return total
}
const bruto = calculaPagamento(1000, 50, 10)
console.log(bruto)
// 1400
Arrow function
� uma forma sucinta de escrever fun��es an�nimas em JavaScript.
Vis�o geral
As arrow function podem ser utilizadas em todos os cen�rios onde as fun��o s�o aplicadas como por exemplo callbacks. Sua diferen�a pratica se d� na aus�ncia de refer�ncia do this de seu escopo e em sintaxe mais curta.
Considere por exemplo que seja necess�rio efetuar um relatorio onde voc� precisa somar o valor de todos os carros que tem valor maior que R$14.000,00. Para execu��o desta tarefa utilizamos apenas os m�todos filter, map e reduce.
const carros = [
{ id: 1, modelo: 'Corsa', marca: 'Chevrolet', preco: 18000 },
{ id: 2, modelo: 'Punto', marca: 'Fiat', preco: 12000 },
{ id: 3, modelo: 'Gol', marca: 'Volkswagen', preco: 14000 },
{ id: 4, modelo: 'Saveiro', marca: 'Volkswagen', preco: 20000 },
{ id: 5, modelo: 'Uno', marca: 'Fiat', preco: 12000 },
{ id: 6, modelo: 'Onix', marca: 'Chevrolet', preco: 25000 },
{ id: 7, modelo: 'Palio', marca: 'Fiat', preco: 13000 },
{ id: 8, modelo: 'Prisma', marca: 'Chevrolet', preco: 15000 },
{ id: 9, modelo: 'Logan', marca: 'Renault', preco: 15000 }
]
const data = carros
.filter(item => item.preco >= 14000)
.map(item => item.preco)
.reduce((anterior, atual) => anterior + atual, 0)
const total = data.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' })
console.log(total)
// R$ 107,000.00Perceba que as arrow functions tornaram o c�digo mais sucinto gra�as a sua sintaxe curta, ao inv�s de ter que declarar uma fun��o como callback como no fragmento de c�digo abaixo.
.filter(function (item) {
return item.preco >= 14000
})Sintaxe
(parametro1, parametro2, ..., parametroX) => expressao- parametro: valores passados para dentro do escopo da fun��o.
- expressao: bloco de c�digo que pode retornar um valor ao final da execu��o.
Na pr�tica
Exemplo 1
No exemplo abaixo a fun��o soma recebe dois par�metros e retorna a soma desses. Podemos declar�-la de forma tradicional, como a seguir:
function soma (a, b) {
return a + b
}
console.log(soma(1, 2)) // 3Esta mesma fun��o pode ser escrita com uma arrow function:
const soma = (a, b) => {
return a + b
}
console.log(soma(1, 2)) // 3E poss�vel tamb�m declar�-la utilizando a sintaxe curta:
const soma = (a, b) => a + b
console.log(soma(1, 2)) // 3Exemplo 2
Neste exemplo temos uma fun��o que recebe por par�metro uma frase e separa cada palavra em uma lista retornando-a como resultado.
A seguir podemos ver esta fun��o escrita de forma tradicional:
const frase = 'Eu curto a DevMedia'
function separaFrase (frase) {
return frase.split(' ')
}
console.log(separaFrase(frase)) // [ 'Eu', 'curto', 'a', 'DevMedia' ]
Agora temos essa mesma fun��o utilizando arrow functions:
const frase = 'Eu curto a DevMedia'
const separaFrase = (texto) => {
return texto.split(' ')
}
console.log(separaFrase(frase)) // [ 'Eu', 'curto', 'a', 'DevMedia' ]Quando h� apenas um par�metro na fun��o n�o � necess�rio o uso de par�nteses na express�o, como no exemplo abaixo:
const separaFrase = texto => texto.split(' ')Exemplo 3
As arrow functions podem ser utilizadas para tornar a sintaxe de m�todos que recebem callback mais simples. No exemplo abaixo utilizamos o m�todo find para encontrar em uma lista o usu�rio cujo id � igual a 2:
const usuarios = [
{ id: 1, nome: 'Maria da Silva' },
{ id: 2, nome: 'Jo�o Fernando' },
{ id: 3, nome: 'Pedro dos Santos' }
]
const usuario = usuarios.find(usuario => usuario.id === 2)
console.log(usuario.nome) // Jo�o FernandoAs arrow functions funcionam em m�todos que recebam callback como por exemplo o map, reduce e filter.
Exemplo 4
Neste exemplo temos a fun��o Contador que exibe um log com o n�mero de segundos desde o momento em que foi instanciada. Vamos ver primeiro esta fun��o utilizando a sintaxe dispon�vel at� o ECMAScript 5:
function Contador () {
var self = this
self.valorAtual = 0
setInterval(function () {
self.valorAtual++
console.log(self.valorAtual)
}, 1000)
}Neste exemplo utilizamos a vari�vel self na linha 2 para armazenar uma refer�ncia ao escopo pai (Contador) para acess�-lo dentro de outras fun��es, como � feito dentro do escopo do setTimeout. Entre as linhas 6 e 9 aumentamos o valorAtual em 1 e em seguida exibimos um log com valor do self.valorAtual.
No exemplo abaixo reescrevemos a mesma fun��o (Contador) utilizando arrow function, pois n�o possuem bind do this como as fun��es tradicionais, evitando o uso de vari�veis para armazenar o escopo de uma fun��o pai, pr�tica comum at� o ES5:
function Contador () {
this.valorAtual = 0
setInterval(() => {
this.valorAtual++
console.log(this.valorAtual)
}, 1000)
}A partir deste exemplo podemos concluir que, al�m de ter uma sintaxe mais simples, as arrow functions s�o uma ferramenta poderosa quando � necess�rio acessar o escopo da fun��o pai.
Exemplo 5
� poss�vel utilizar arrow function para retornar objetos, pr�tica comum com as action creators do Redux. No exemplo abaixo podemos ver como esse processo � feito:
const addTodo = (mensagem) => ({
mensagem,
isComplete: false
})
console.log(addTodo('Ol� mundo!!')) // { mensagem: 'Ol� mundo!!', isComplete: false }Compatibilidade
| Engine | Vers�o Minima |
|---|---|
| Node.JS ( V8) | 6.4.0 |
| Safari ( WebKit) | 11.1 |
| Chrome ( V8) | 68 |
| Microsoft Edge ( ChakraCore) | 17 |
| Firefox ( Gecko) | 61 |
Nota: O Opera utiliza atualmente grande parte do c�digo do Chrome como base para o seu pr�prio desenvolvimento e por isso ele n�o � mencionado nesta listagem.