Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

265
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!