Além das declarações de funções e das expressões de funções, o JavaScript tem outra sintaxe muito concisa para definir uma função. Estas funções chamam-se funções arrow.
Aqui está uma comparação entre uma declaração de função e uma função arrow.
function addUpTwoNumbers(num1, num2) {
return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
return num1 + num2;
};
Se o corpo da função contiver apenas uma instrução de retorno, como no exemplo acima, as chavetas {} e a palavra-chave return podem ser omitidas.
Se houver apenas um parâmetro, também se podem omitir os parênteses ().
const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;
As funções arrow são usadas muitas vezes para definir funções de callback curtas diretamente na chamada da função.
applyToSquare(number => number * number);
Os Arrays têm métodos incorporados para analisar o conteúdo do array.
A maioria destes métodos recebe como argumento uma função que devolve verdadeiro ou falso.
Uma função deste tipo chama-se predicate.
Estes métodos incorporados servem para serem usados em vez de um ciclo for ou do método forEach incorporado:
Exemplo de análise com um ciclo for:
const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] === 'two') {
return i;
}
}
// => 1
Exemplo de análise com um método incorporado:
const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1
Abaixo mostramos outros métodos incorporados úteis para analisar um array. Consulta a MDN para veres a lista completa de métodos de array.
includesO método includes(value) determina se um array inclui um determinado valor.
Devolve true quando o valor está incluído e false caso contrário.
const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false
everyO método every(predicate) recebe uma função que é um predicado.
Testa se todos os elementos do array devolvem true quando são passados ao predicado.
Por outras palavras: o método testa se todos os seus elementos passam o teste passado à chamada da função.
Devolve true quando todos os elementos passam o teste do predicado e false caso contrário.
const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true
someO método some(predicate) é igual ao método every, mas devolve true se pelo menos um elemento do array passar o teste do predicado.
const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true
findO método find(predicate) devolve o valor do primeiro elemento do array que passa o teste do predicate.
Onde some() devolve true quando passa, find() devolve o valor concreto que está no array.
O método devolve undefined quando nenhum dos elementos do array passa o teste do predicado.
const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1
findIndexO findIndex(predicate) é igual ao método find(), mas devolve o índice (o primeiro) do elemento que passa o teste do predicado em vez do value.
O método devolve -1 quando nenhum dos elementos do array passa o teste do predicado.
const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1
A Elyse, futura maga, continua o seu treino. Vão ser-lhe dadas várias pilhas de cartas com que precisa de fazer os seus truques. Para tornar as coisas um pouco mais fáceis, só usa as cartas de 1 a 10.
Neste exercício, usa métodos incorporados para analisar o conteúdo de um array.
A Elyse quer saber a posição (o índice) de uma carta na pilha.
const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3
A Elyse quer determinar se uma carta está presente na pilha, ou seja, se a pilha contém um number específico.
const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true
A Elyse quer saber se todas as cartas são pares, ou seja, se cada número na pilha é um number par.
isEachCardEven([2, 4, 6, 7]);
// => false
A Elyse quer saber se há um número ímpar na pilha.
doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true
A Elyse quer saber o valor da primeira carta ímpar.
getFirstOddCard([4, 2, 8, 7, 9]);
// => 7
A Elyse quer saber a posição da primeira carta par.
getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.