Đây là một kiểu nén đơn giản trong đó bạn sử dụng một biến số để lưu trữ nhiều trạng thái nhị phân / nhị phân, sử dụng nhân đôi và thực tế là mỗi số nhân đôi là 1 + tổng của tất cả các trạng thái trước đó.
Tôi chắc chắn đó phải là một kỹ thuật cũ, nổi tiếng, tôi muốn biết nó được gọi là gì để tham khảo nó đúng cách. Tôi đã thực hiện một số tìm kiếm trên mọi cách tôi có thể nghĩ ra để mô tả nó, nhưng không tìm thấy gì ngoài một số bài viết trên blog mà các tác giả bài viết dường như đã tự tìm ra điều này và không biết nên gọi nó là gì ( ví dụ 1 , ví dụ 2 ).
Ví dụ, đây là một triển khai rất đơn giản nhằm minh họa khái niệm:
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
}
Bạn cũng có thể sử dụng các toán tử bitwise, phân tích cú pháp số 2 cơ bản, enums ... Có nhiều cách hiệu quả hơn để thực hiện nó, tôi quan tâm đến tên của cách tiếp cận nói chung hơn.
bool
thường được lưu trữ dưới dạng số nguyên 32 bit bên trong. Như vậy, việc đóng gói có thể tạo ra sự khác biệt của hệ số 32. Điều đó thực sự rất nhiều. Ý tôi là, các lập trình viên của chúng tôi luôn sẵn sàng vứt bỏ một nửa tài nguyên của chúng tôi, nhưng tôi thường miễn cưỡng vứt bỏ 97% trong số đó. Các yếu tố lãng phí như vậy có thể dễ dàng tạo ra sự khác biệt giữa việc có thể chạy các trường hợp sử dụng quan trọng và hết bộ nhớ.
enums
, và chúng có thể có mộtFlags
thuộc tính. Họ có thể làm cho mã của bạn đơn giản hơn nhiều.