Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre retorno do Reflect.set

Olá, Devs. Tudo bem ? Espero que sim!

Então, estou com uma certa dúvida sobre um detalhe "bobo" em relação ao handler set.

A solução do professor foi algo como :

set(target, prop, value, receiver){
    if(props.includes(prop)){
        target[prop] = value;
        acao(target);
    }
     return  Reflect.set(target, prop, value, receiver);
}

A solução funciona perfeitamente, porém, fiquei com a impressão que existe uma atribuição dupla do valor. Ou seja, alteração de uma variável em dois locais diferentes. Uma atribuição direta feita manualmente no if e outra usando o método reflect.

Sei que isso consome uma quantidade de processamento insignificante, porém queria ter certeza se realmente é feita essa atribuição dupla.

Até por uma questão de evitar falhas, tendo em vista que caso em um momento altere a forma de retorno na atribuição do if e não faça essa alteração no Reflect.set criaria uma inconsistência no dado. Sendo obrigado, desta forma, a alterar dois lugares no código para garantir consistência. Faz sentido essa minha preocupação ?

Pensei numa solução, porém adicionando mais uma variável ao código, desta forma, deixando mais extenso. No entanto, alterando a variável em um só lugar.

set(target, prop, value, receiver){
    const valorAplicado = Reflect.set(target, prop, value, receiver)
    if(props.includes(prop)){
        acao(target);
    }
    return valorAplicado;
}

Resumo:

  • O código inicial proposto proposto na aula faz atribuição dupla ? (Alteração de uma variável em dois lugares diferentes)
  • Caso faça a atribuição dupla, isso realmente pode abrir margem para inconsistência de dados ?
  • Caso precise alterar o valor a ser atribuído, neste caso teria que alterar nos dois lugares, certo?

Algo como isso:

set(target, prop, value, receiver){
    if(props.includes(prop)){
        target[prop] = value + <alteração do dado>;
        acao(target);
    }
     return  Reflect.set(target, prop,( value + <alteração do dado>), receiver);
}

Desculpa o tamanho do texto para uma pergunta simples.

Agradeço desde já a contribuição de vocês :)

1 resposta
solução!

Fala ai Jair, tudo bem? Muito bem observado e faz muito sentido, talvez uma solução simples seria adicionar um return dentro do if para não seguir com o código e executar o Reflect.set.

Algo assim:

set(target, prop, value, receiver){
    if(props.includes(prop)){
        target[prop] = value;
        acao(target);
    return;
    }
     return  Reflect.set(target, prop, value, receiver);
}

Espero ter ajudado.