Só pra constar (e desviando um pouco do assunto principal), quando uma arrow function só tem um parâmetro, os parênteses podem ser omitidos. E quando ela só tem uma única expressão, as chaves e a própria palavra return
também podem ser omitidas. Ou seja, poderia ser apenas:
const numeros = [1, 2, 3, 4, 5];
const quadrados = numeros.map(numero => numero * numero);
E para fazer um loop pelos elementos, caso você não precise do índice (e somente dos valores), pode usar for..of
:
const numeros = [1, 2, 3, 4, 5];
const quadrados = [];
for (const numero of numeros) {
quadrados.push(numero * numero);
}
Por fim, outra solução é criar o array com o tamanho correto e só ir setando os índices um a um:
const numeros = [1, 2, 3, 4, 5];
const quadrados = Array(numeros.length);
for (let i = 0; i < numeros.length; i++)
quadrados[i] = numeros[i] * numeros[i];
Fazendo um teste rápido aqui com o Benchmark.js, esta solução se mostrou a mais rápida de todas (e a diferença aumenta ainda mais conforme o array cresce).
Claro que para poucos arrays pequenos não importa, a diferença será irrisória (para poucos dados, tudo é rápido), mas se precisar processar muitos arrays grandes, pode começar a fazer diferença e é importante saber desses detalhes.
E aí a escolha vai muito além de "imperativo vs declarativo", tem muito mais a ver com saber como cada solução funciona. O map
(e seus "amigos funcionais" reduce
, filter
, forEach
, etc) recebe como parâmetro uma função de callback. Ou seja, para cada elemento do array, haverá uma chamada de função, e isso tem o seu custo. Com o loop simples, essas chamadas não ocorrem e daí a diferença (mas for..of
, por sua vez, usa o protocolo de iteradores, que nas implementações atuais não está tão eficiente e dependendo do caso fica pior que map
).
Sobre "devs mais experientes gostam da forma imperativa", acho que é mais o seu viés. Já vi pessoas experientes que gostam mais de um ou do outro, ou de ambos (e escolhem qual usar conforme as circunstâncias, analisando o contexto - como aliás deveria ser para qualquer coisa na nossa área).