Executando verificação de segurança...
1

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?

Carregando publicação patrocinada...
1

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)

1

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.

1

Sim, claro. Não digo ter que refazer os cálculos para chegar ao mesmo array armazenado na constante.
O que eu questionei foi o fato de ter de realizar 3 iterações sobre um array hipotético de 18 mil itens, por exemplo, para, então, chegar à constante brazilianActiveUsersName.