È una sorta di semplice compressione in cui si utilizza una variabile numerica per memorizzare molti stati booleani / binari, usando il raddoppio e il fatto che ogni numero di raddoppio è 1 + la somma di tutti i precedenti.
Sono sicuro che dev'essere una tecnica vecchia e conosciuta, mi piacerebbe sapere come chiamarla correttamente. Ho fatto diverse ricerche su tutti i modi in cui posso pensare per descriverlo, ma non ho trovato nulla al di là di alcuni articoli del blog in cui gli autori dell'articolo sembrano averlo capito da soli e non sanno come chiamarlo, sia ( esempio 1 , esempio 2 ).
Ad esempio, ecco un'implementazione molto semplice intesa a illustrare il concetto:
packStatesIntoNumber () {
let num = 0
if (this.stateA) num += 1
if (this.stateB) num += 2
if (this.stateC) num += 4
if (this.stateD) num += 8
if (this.stateE) num += 16
if (this.stateF) num += 32
return num
}
unpackStatesFromNumber (num) {
assert(num < 64)
this.stateF = num >= 32; if (this.stateF) num -= 32
this.stateE = num >= 16; if (this.stateE) num -= 16
this.stateD = num >= 8; if (this.stateD) num -= 8
this.stateC = num >= 4; if (this.stateC) num -= 4
this.stateB = num >= 2; if (this.stateB) num -= 2
this.stateA = num >= 1; if (this.stateA) num -= 1
}
Potresti anche usare operatori bit a bit, analisi di numeri di base 2, enumerazioni ... Ci sono molti modi più efficaci per implementarlo, sono interessato al nome dell'approccio in generale.