Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

271
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda