Como podemos saber até que ponto vale trocarmos performance por legibilidade de código?
Digo... Para o exemplo exposto no artigo:
const numeros = [2,3,4,5,6,7,8,9,10]
numeros.filter((numero) => numero % 2 === 0).map((numero) => numero * 2)
// [ 4, 8, 12, 16, 20 ]
Tudo bem, é uma pequena lista com dados primitivos. Mas, e se fosse um grande array, mais complexo, com dados bem mais complexos?
Digo, um array com 18 mil usuários, por exemplo.
const isActive = user => user.status.current === ActiveStatus.ACTIVE;
const isFromBrasil = user => user.region === 'BR';
const getFullName = user => `${user.name} ${user.lastName}`;
const brazilianActiveUsersName = aBigUsersArray
.filter(isFromBrasil)
.filter(isActive)
.map(getFullName)
Isso não aumentaria o processamento por ter de iterar o mesmo array X vezes, onde X é a quantidade de operações/tratamentos que fazemos em cima dos dados?
Compiladores já fazem otimizações que convertem códigos desse estilo em uma abordagem mais rápida, desse jeito você tem a legibilidade do código + velocidade
Além do mais, ao contrário de décadas passadas onde memória era extremamente cara e a performance dobrava (Lei de Moore) e precisava ser bem gerenciada, hoje, memória RAM é muito barata mas a Lei de Moore está acabando e precisamos usar mais núcleos da CPU e consequentemente programas precisam utilizar computação paralela (Algo que linguagens funcionais são muito boas)
Pelo que eu entendo, você poderia muito bem reutilizar a contante brazilianActiveUsersName
, já que isso não provocaria nenhuma alteração de estado no programa.