Es una especie de compresión simple en la que se usa una variable numérica para almacenar muchos estados booleanos / binarios, utilizando la duplicación y el hecho de que cada número de duplicación es 1 + la suma de todas las anteriores.
Estoy seguro de que debe ser una técnica antigua y bien conocida, me gustaría saber cómo se llama para referirse a ella correctamente. He hecho varias búsquedas en todas las formas que se me ocurren para describirlo, pero no he encontrado nada más que en algunos artículos de blogs donde los autores del artículo parecen haberlo descubierto por sí mismos y tampoco saben cómo llamarlo ( example 1 , example 2 ).
Por ejemplo, aquí hay una implementación muy simple que pretende ilustrar el concepto:
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
}
También puede usar operadores bitwise, análisis de números de base 2, enumeraciones ... Hay muchas formas más eficientes de implementarlo, estoy interesado en el nombre del enfoque de manera más general.