C'est une sorte de compression simple dans laquelle vous utilisez une variable numérique pour stocker plusieurs états booléens / binaires, en utilisant le doublage et le fait que chaque nombre de doublage est égal à 1 + la somme de tous les précédents.
Je suis sûr que ce doit être une vieille technique bien connue, j'aimerais savoir comment on l'appelle pour s'y référer correctement. J'ai fait plusieurs recherches sur tous les moyens possibles pour le décrire, mais je n'ai rien trouvé au-delà de certains articles de blog où les auteurs de l'article semblent l'avoir compris eux-mêmes et ne savent pas comment l'appeler ( exemple 1 , exemple 2 ).
Par exemple, voici une implémentation très simple destinée à illustrer le concept:
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
}
Vous pouvez également utiliser des opérateurs au niveau des bits, l'analyse du nombre de base 2, les énumérations ... Il existe de nombreuses manières plus efficaces de l'implémenter. Je m'intéresse plus généralement au nom de l'approche.
bool
est généralement stocké en interne sous la forme d'un entier de 32 bits. En tant que tel, l'emballage peut faire la différence d'un facteur 32. C'est beaucoup. Je veux dire, nous, les programmeurs, sommes toujours prêts à jeter la moitié de nos ressources, mais je suis généralement réticent à en rejeter 97%. De tels facteurs de gaspillage peuvent facilement faire la différence entre la capacité d'exécuter des cas d'utilisation importants et le manque de mémoire.
enums
en a et ils peuvent avoir unFlags
attribut. Ils pourraient rendre votre code beaucoup plus simple.