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 :)