Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

270
Visualizações
¿Forma ergonómica de solo agregar un nuevo objeto a un mapa si no existe?

Estoy desarrollando un juego en el que muy a menudo deseo realizar la siguiente operación:

 if (!buffs.has("shielding")) { buffs.add(new ShieldingBuff(50)); // 50 is the shield amount }

donde buffs es Map<string, Buff> .

Pensé envolverlo en una función auxiliar así:

 function addBuff(buffType, buff) { if (!this.buffs.has(buffType) { this.buffs.add(buff); } }

y luego llamándolo así:

 addBuff("shielding", new ShieldingBuff(50));

Pero el problema con eso es que en el 99 % de los casos, el beneficio ya se habrá aplicado, y esto genera un costo significativo de recolección de elementos no utilizados, ya que estamos asignando un objeto ShieldingBuff independientemente de si realmente lo necesitamos o no.

Estaba pensando en usar un cortocircuito de alguna manera, pero no puedo pensar en una forma ergonómica de hacerlo. Lo mejor que pude hacer es llegar a algo como esto:

 buffs.add(!buffs.has("shielding") && new ShieldingBuff(50));

que funciona para evitar la asignación en el caso de que el beneficio ya se haya aplicado ... pero aún es bastante detallado. Idealmente, sería capaz de encapsular el cheque has en la función de ayuda de alguna manera, pero no puedo ver una manera de hacerlo mientras mantengo el truco de cortocircuito para evitar la asignación en el caso mayoritario donde el beneficio ya está aplicado y nada. hay que hacer

Mi preocupación es que si tengo que acordarme de llamar a has check cada vez, eventualmente lo olvidaré y eso conducirá a un error. Me gustaría evitar eso si es posible.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Algo que tiene un poco de sobrecarga pero probablemente no tanto como ShieldingBuff sería una función simple que, cuando se llama, crea una:

 addBuff("shielding", () => new ShieldingBuff(50));
 function addBuff(buffType, makeBuff) { if (!this.buffs.has(buffType) { this.buffs.add(makeBuff()); } }

Otro enfoque sería refactorizar su código para que no tenga que repetir 'shielding' y shieldingBuff ; en su lugar, use un objeto o Mapa para las mejoras en lugar de tener múltiples variables independientes.

Por ejemplo, con un objeto como

 const buffs = { Shielding: function() { // code of ShieldingBuff here } // ... }

Entonces puedes hacer

 addBuff("shielding", 50)

donde, si se cumple la condición, addBuff mayúscula la primera letra y pasa el 50 al constructor cuando es necesario, utilizando la notación de paréntesis para encontrar el constructor en el objeto de buffs .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda