Ini adalah semacam kompresi sederhana di mana Anda menggunakan satu variabel numerik untuk menyimpan banyak status boolean / biner, menggunakan penggandaan dan fakta bahwa setiap angka penggandaan adalah 1 + jumlah dari semua yang sebelumnya.
Saya yakin itu pasti teknik lama dan terkenal, saya ingin tahu apa namanya untuk merujuk dengan benar. Saya telah melakukan beberapa pencarian pada setiap cara yang saya bisa pikirkan untuk menggambarkannya, tetapi tidak menemukan apa pun di luar beberapa artikel blog di mana penulis artikel tampaknya telah menemukan jawabannya sendiri dan tidak tahu harus menyebutnya apa, misalnya ( contoh 1 , contoh 2 ).
Sebagai contoh, berikut ini adalah implementasi yang sangat sederhana yang dimaksudkan untuk menggambarkan konsep:
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
}
Anda juga bisa menggunakan operator bitwise, parsing angka 2 dasar, enum ... Ada banyak cara yang lebih efisien untuk mengimplementasikannya, saya tertarik dengan nama pendekatan yang lebih umum.
bool
umumnya disimpan sebagai integer 32 bit secara internal. Dengan demikian, pengepakan dapat membuat perbedaan faktor 32. Itu sangat banyak. Maksudku, kita programmer selalu siap untuk membuang setengah dari sumber daya kita, tetapi saya umumnya enggan membuang 97% dari mereka. Faktor pemborosan seperti itu dapat dengan mudah membuat perbedaan antara kemampuan menjalankan kasing yang penting dan kehabisan memori.
enums
, dan mereka dapat memilikiFlags
atribut. Mereka bisa membuat kode Anda jauh lebih sederhana.