Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Qual o custo computacional?

Código da aula

JSON.parse(xhr.responseText)
                    .map(dado => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)
                    .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));

Analisando esse código reparei que ele ira percorrer a lista criando os objetos de negociação e em seguida irá percorrer novamente a nova lista gerada pelo map para adicionar os objetos na listaNegociacoes. Ou seja ele vai percorrer a lista inteira duas vezes para inseri-la na estrutura de dados. Compreendo que o Flávio implementou dessa forma por questões didáticas mostrando o uso do map. Mas em uma aplicação real onde temos milhares de negociações por exemplo. A implementação do Flavio seria mais custosa em relação a implementação que fiz abaixo?

            listaImportada.forEach(negociacao => {
                this.listaNegociacoes.addItem(new Negociacao(
                    new Date(negociacao.data),
                    negociacao.quantidade,
                    negociacao.valor));
            });
4 respostas
solução!

O custo é pequeno. Nunca haveria zilhares de negociações porque nesse caso teria algo de muito errado com a aplicação. Nese caso paginação seria indicado.

Em estrutura de dados o array é extremamente rapido para varrer e lento para modificar. Ele não é uma lista encadeada.

Contudo, nada o impede de seguir a forma que indicou. Mas nesse caso seu código mistura duas responsabilidades no único ponto. Se precisar gerar mais transformações mais complexo e difícil de entender ficará.

A forma anterior separa cada unidade uma da outra. Fica fácil gerar outras transformações.

Eu escolho a estética e só abdico dela se há impacto real na performance.

Mas sua preocupação é válida. Faça teste com performance.now(). Dá uma pesquisada. Ai você pode ter dados mais objetivos dos testes de performance.

Exemplo

let t1 = performance.now();
// código aqui
let t2 = performance.now();
console.log(t2 - t1)

Eu uso às vezes para medir o tempo de execução.

Sucesso e bom estudo meu aluno!

Obrigado Flávio pela resposta e pela indicação do performance.now(), irei pesquisar e fazer um teste. Também prefiro a estética e a legibilidade do código.

Parabéns pelo excelente curso!