এটি এক ধরণের সহজ সংকোচনের যেখানে আপনি বহু বুলিয়ান / বাইনারি রাজ্যগুলি সংরক্ষণ করতে দ্বিগুণ এবং প্রতিটি দ্বিগুণ সংখ্যা পূর্ববর্তী সমস্ত সংখ্যার যোগফল 1 + ব্যবহার করে একটি সংখ্যক পরিবর্তনশীল ব্যবহার করেন।
আমি নিশ্চিত এটি অবশ্যই একটি পুরাতন, সুপরিচিত প্রযুক্তি, আমি এটি জানতে চাই এটি সঠিকভাবে উল্লেখ করার জন্য এটি কী বলে। আমি এটি বর্ণনা করার জন্য যেভাবেই ভাবতে পারি সে সম্পর্কে আমি বেশ কয়েকটি অনুসন্ধান করেছি, তবে নিবন্ধের লেখকরা নিজেরাই এটি আবিষ্কার করেছেন এবং এটি কী কল করবেন তা জানেন না এমন কয়েকটি ব্লগ নিবন্ধের বাইরে কিছুই খুঁজে পেল না ( উদাহরণ 1 , উদাহরণ 2 )।
উদাহরণস্বরূপ, ধারণাটি চিত্রিত করার উদ্দেশ্যে এখানে একটি খুব সাধারণ বাস্তবায়ন দেওয়া হয়েছে:
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
}
আপনি বিটওয়াইজ অপারেটর, বেস 2 নম্বর পার্সিং, এনামগুলিও ব্যবহার করতে পারেন ... এটি বাস্তবায়নের আরও অনেক কার্যকর উপায় রয়েছে, আমি সাধারণভাবে পদ্ধতির নামে আগ্রহী।
boolসাধারণত অভ্যন্তরীণভাবে 32 বিট পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয়। যেমন, প্যাকিং 32 এর একটি ফ্যাক্টরের পার্থক্য তৈরি করতে পারে That's এটি সত্যিই অনেক। আমার অর্থ, আমরা প্রোগ্রামাররা সর্বদা আমাদের অর্ধেক সম্পদ ফেলে দিতে প্রস্তুত, তবে আমি সাধারণত তাদের 97% ফেলে দিতে নারাজ। এই জাতীয় বর্জ্য কারণগুলি সহজেই গুরুত্বপূর্ণ ব্যবহারের কেস চালাতে সক্ষম হওয়া এবং স্মৃতিশক্তি হারিয়ে যাওয়ার মধ্যে পার্থক্য করতে পারে।
enumsএবং তাদের একটিFlagsবৈশিষ্ট্য থাকতে পারে। তারা আপনার কোডটি আরও সহজ করে তুলতে পারে।