ജാവാസ്ക്രിപ്റ്റിന്റെ BigInt ടൈപ്പിനെക്കുറിച്ചുള്ള ഒരു സമ്പൂർണ്ണ ഗൈഡ്. വലിയ പൂർണ്ണസംഖ്യ ഗണിതത്തിൽ ഇതിന്റെ സവിശേഷതകൾ, ഉപയോഗം, പ്രയോഗങ്ങൾ എന്നിവ ഇതിൽ ഉൾപ്പെടുന്നു. ജാവാസ്ക്രിപ്റ്റിന്റെ പരിമിതികൾ മറികടന്ന് കൃത്യതയോടെ കണക്കുകൂട്ടലുകൾ നടത്താൻ പഠിക്കുക.
ജാവാസ്ക്രിപ്റ്റ് BigInt: വലിയ പൂർണ്ണസംഖ്യകളുടെ ഗണിതത്തിൽ വൈദഗ്ദ്ധ്യം നേടാം
ജാവാസ്ക്രിപ്റ്റ് ഒരു ബഹുമുഖ ഭാഷയാണെങ്കിലും, വളരെ വലിയ പൂർണ്ണസംഖ്യകൾ കൈകാര്യം ചെയ്യുന്നതിൽ അതിന് പരിമിതികളുണ്ട്. സ്റ്റാൻഡേർഡ് `Number` ടൈപ്പിന് `Number.MAX_SAFE_INTEGER` എന്ന് വിളിക്കുന്ന ഒരു നിശ്ചിത പരിധി വരെ മാത്രമേ പൂർണ്ണസംഖ്യകളെ കൃത്യമായി പ്രതിനിധീകരിക്കാൻ കഴിയൂ. ഈ പരിധിക്കപ്പുറം, കണക്കുകൂട്ടലുകൾ കൃത്യമല്ലാതാവുകയും അപ്രതീക്ഷിത ഫലങ്ങളിലേക്ക് നയിക്കുകയും ചെയ്യുന്നു. ഇവിടെയാണ് BigInt
സഹായത്തിനെത്തുന്നത്. ECMAScript 2020-ൽ അവതരിപ്പിച്ച BigInt
, സ്റ്റാൻഡേർഡ് `Number` ടൈപ്പിന്റെ പരിമിതികൾക്കപ്പുറം, ഏത് വലുപ്പത്തിലുള്ള പൂർണ്ണസംഖ്യകളെയും പ്രതിനിധീകരിക്കാനും കൈകാര്യം ചെയ്യാനും ഒരു മാർഗ്ഗം നൽകുന്ന ഒരു ബിൽറ്റ്-ഇൻ ഒബ്ജക്റ്റാണ്.
BigInt-ന്റെ ആവശ്യകത മനസ്സിലാക്കാം
BigInt
-ന് മുമ്പ്, ജാവാസ്ക്രിപ്റ്റ് ഡെവലപ്പർമാർക്ക് വലിയ പൂർണ്ണസംഖ്യകളുടെ കണക്കുകൂട്ടലുകൾ കൈകാര്യം ചെയ്യാൻ ലൈബ്രറികളെയോ കസ്റ്റം ഇംപ്ലിമെന്റേഷനുകളെയോ ആശ്രയിക്കേണ്ടി വന്നിരുന്നു. ഈ പരിഹാരങ്ങൾ പലപ്പോഴും പ്രകടനത്തിൽ പിന്നോട്ട് പോകാനും സങ്കീർണ്ണത വർദ്ധിപ്പിക്കാനും കാരണമായി. BigInt
-ന്റെ വരവ് വലിയ പൂർണ്ണസംഖ്യകളുമായി പ്രവർത്തിക്കാൻ ഒരു നേറ്റീവും കാര്യക്ഷമവുമായ മാർഗ്ഗം നൽകി. ഇത് പല മേഖലകളിലും പുതിയ സാധ്യതകൾ തുറന്നു, അവയിൽ ചിലത് താഴെ പറയുന്നവയാണ്:
- ക്രിപ്റ്റോഗ്രഫി: ക്രിപ്റ്റോഗ്രാഫിക് അൽഗോരിതങ്ങൾക്ക് വലിയ പ്രൈം നമ്പറുകൾ സുരക്ഷിതമായി കൈകാര്യം ചെയ്യുന്നത് നിർണായകമാണ്.
- സാമ്പത്തിക കണക്കുകൂട്ടലുകൾ: കൃത്യത നഷ്ടപ്പെടാതെ വലിയ പണത്തിന്റെ മൂല്യങ്ങളെ പ്രതിനിധീകരിക്കുന്നു.
- ശാസ്ത്രീയ കമ്പ്യൂട്ടിംഗ്: വളരെ വലുതോ ചെറുതോ ആയ സംഖ്യകൾ ഉൾപ്പെടുന്ന സങ്കീർണ്ണമായ കണക്കുകൂട്ടലുകൾ നടത്തുന്നു.
- ഉയർന്ന കൃത്യതയുള്ള ടൈംസ്റ്റാമ്പുകൾ: നാനോസെക്കൻഡ് കൃത്യതയോടെ ടൈംസ്റ്റാമ്പുകളെ പ്രതിനിധീകരിക്കുന്നു.
- ഐഡി ജനറേഷൻ: സവിശേഷവും വളരെ വലുതുമായ ഐഡന്റിഫയറുകൾ സൃഷ്ടിക്കുന്നു.
BigInt വാല്യൂകൾ എങ്ങനെ നിർമ്മിക്കാം
ജാവാസ്ക്രിപ്റ്റിൽ BigInt
വാല്യൂകൾ നിർമ്മിക്കാൻ പ്രധാനമായും രണ്ട് വഴികളുണ്ട്:
- `BigInt()` കൺസ്ട്രക്റ്റർ ഉപയോഗിച്ച്: ഈ കൺസ്ട്രക്റ്ററിന് ഒരു നമ്പർ, സ്ട്രിംഗ്, അല്ലെങ്കിൽ ബൂളിയൻ വാല്യൂവിനെ
BigInt
-ലേക്ക് മാറ്റാൻ കഴിയും. - `n` സഫിക്സ് ഉപയോഗിച്ച്: ഒരു പൂർണ്ണസംഖ്യയുടെ അക്ഷരത്തിന് ശേഷം `n` ചേർക്കുന്നത് ഒരു
BigInt
ഉണ്ടാക്കുന്നു.
ഉദാഹരണങ്ങൾ:
`BigInt()` കൺസ്ട്രക്റ്റർ ഉപയോഗിച്ച്:
const bigIntFromNumber = BigInt(12345678901234567890);
const bigIntFromString = BigInt("98765432109876543210");
const bigIntFromBoolean = BigInt(true); // ഫലം 1n ആയിരിക്കും
const bigIntFromFalseBoolean = BigInt(false); // ഫലം 0n ആയിരിക്കും
console.log(bigIntFromNumber); // ഔട്ട്പുട്ട്: 12345678901234567890n
console.log(bigIntFromString); // ഔട്ട്പുട്ട്: 98765432109876543210n
console.log(bigIntFromBoolean); // ഔട്ട്പുട്ട്: 1n
console.log(bigIntFromFalseBoolean); // ഔട്ട്പുട്ട്: 0n
`n` സഫിക്സ് ഉപയോഗിച്ച്:
const bigIntLiteral = 12345678901234567890n;
console.log(bigIntLiteral); // ഔട്ട്പുട്ട്: 12345678901234567890n
പ്രധാന കുറിപ്പ്: ഗണിതപരമായ പ്രവർത്തനങ്ങളിൽ BigInt
-ഉം Number
-ഉം നേരിട്ട് ഒരുമിച്ച് ഉപയോഗിക്കാൻ കഴിയില്ല. കണക്കുകൂട്ടലുകൾ നടത്തുന്നതിന് മുമ്പ് നിങ്ങൾ അവയെ ഒരേ ടൈപ്പിലേക്ക് മാറ്റേണ്ടതുണ്ട്. അവയെ നേരിട്ട് ഒരുമിച്ച് ഉപയോഗിക്കാൻ ശ്രമിച്ചാൽ ഒരു `TypeError` ലഭിക്കും.
BigInt ഗണിത പ്രവർത്തനങ്ങൾ
BigInt
സാധാരണ ഗണിത ഓപ്പറേറ്ററുകളിൽ മിക്കതും പിന്തുണയ്ക്കുന്നു, അവയിൽ ചിലത് താഴെ പറയുന്നവയാണ്:
- സങ്കലനം (`+`)
- വ്യവകലനം (`-`)
- ഗുണനം (`*`)
- ഹരണം (`/`)
- ശിഷ്ടം (`%`)
- കൃത്യങ്കം (`**`)
ഉദാഹരണങ്ങൾ:
const a = 12345678901234567890n;
const b = 98765432109876543210n;
const sum = a + b;
const difference = a - b;
const product = a * b;
const quotient = a / 2n; // കുറിപ്പ്: ഹരണം പൂജ്യത്തിലേക്ക് ചുരുക്കുന്നു
const remainder = a % 7n;
const power = a ** 3n; // കൃത്യങ്കം പ്രതീക്ഷിച്ചതുപോലെ പ്രവർത്തിക്കുന്നു
console.log("തുക:", sum); // ഔട്ട്പുട്ട്: തുക: 111111111011111111100n
console.log("വ്യത്യാസം:", difference); // ഔട്ട്പുട്ട്: വ്യത്യാസം: -86419753208641975320n
console.log("ഗുണനഫലം:", product); // ഔട്ട്പുട്ട്: ഗുണനഫലം: 1219326311370217957951669538098765432100n
console.log("ഹരണഫലം:", quotient); // ഔട്ട്പുട്ട്: ഹരണഫലം: 6172839450617283945n
console.log("ശിഷ്ടം:", remainder); // ഔട്ട്പുട്ട്: ശിഷ്ടം: 5n
console.log("കൃത്യങ്കം:", power); // ഔട്ട്പുട്ട്: കൃത്യങ്കം: 187641281029182300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n
പ്രധാന പരിഗണനകൾ:
- ഹരണം:
BigInt
വാല്യൂകൾ ഉപയോഗിച്ചുള്ള ഹരണം പൂജ്യത്തിലേക്ക് ചുരുക്കുന്നു. ഇതിനർത്ഥം, ഫലത്തിന്റെ ദശാംശ ഭാഗം ഒഴിവാക്കപ്പെടുന്നു. നിങ്ങൾക്ക് കൂടുതൽ കൃത്യമായ ഹരണം വേണമെങ്കിൽ, ആർബിട്രറി-പ്രിസിഷൻ അരിത്മെറ്റിക് പിന്തുണയ്ക്കുന്ന ലൈബ്രറികൾ ഉപയോഗിക്കുന്നത് പരിഗണിക്കുക. - യൂണറി പ്ലസ് ഓപ്പറേറ്റർ (+): യൂണറി പ്ലസ് ഓപ്പറേറ്റർ (+)
BigInt
വാല്യൂകളോടൊപ്പം ഉപയോഗിക്കാൻ കഴിയില്ല, കാരണം ഇത് പഴയ asm.js കോഡുമായി പൊരുത്തക്കേടുകൾ ഉണ്ടാക്കും. ഒരു BigInt-നെ Number-ലേക്ക് മാറ്റണമെങ്കിൽ `Number()` ഫംഗ്ഷൻ ഉപയോഗിക്കുക (ഇങ്ങനെ ചെയ്യുമ്പോൾ കൃത്യത നഷ്ടപ്പെടാൻ സാധ്യതയുണ്ടെന്ന് മനസിലാക്കുക). - ബിറ്റ്വൈസ് ഓപ്പറേറ്ററുകൾ:
BigInt
`&`, `|`, `^`, `~`, `<<`, `>>` തുടങ്ങിയ ബിറ്റ്വൈസ് ഓപ്പറേറ്ററുകളെയും പിന്തുണയ്ക്കുന്നു. ഈ ഓപ്പറേറ്ററുകൾBigInt
വാല്യൂകളുടെ ബൈനറി രൂപത്തിൽ പ്രതീക്ഷിച്ചതുപോലെ പ്രവർത്തിക്കുന്നു.
താരതമ്യ ഓപ്പറേറ്ററുകൾ
BigInt
വാല്യൂകളെ മറ്റ് BigInt
വാല്യൂകളുമായോ അല്ലെങ്കിൽ Number
വാല്യൂകളുമായോ താരതമ്യം ചെയ്യാൻ നിങ്ങൾക്ക് സാധാരണ താരതമ്യ ഓപ്പറേറ്ററുകൾ (`==`, `!=`, `<`, `>`, `<=`, `>=`) ഉപയോഗിക്കാം. എന്നിരുന്നാലും, ടൈപ്പ് കോയർഷന്റെ (type coercion) സാധ്യതയെക്കുറിച്ച് ശ്രദ്ധിക്കുക.
ഉദാഹരണങ്ങൾ:
const a = 10n;
const b = 20n;
const c = 10;
console.log(a == b); // ഔട്ട്പുട്ട്: false
console.log(a != b); // ഔട്ട്പുട്ട്: true
console.log(a < b); // ഔട്ട്പുട്ട്: true
console.log(a > b); // ഔട്ട്പുട്ട്: false
console.log(a <= b); // ഔട്ട്പുട്ട്: true
console.log(a >= b); // ഔട്ട്പുട്ട്: false
console.log(a == c); // ഔട്ട്പുട്ട്: true (ടൈപ്പ് കോയർഷൻ)
console.log(a === c); // ഔട്ട്പുട്ട്: false (ടൈപ്പ് കോയർഷൻ ഇല്ല)
മികച്ച രീതി: BigInt
-ഉം Number
-ഉം താരതമ്യം ചെയ്യുമ്പോൾ അപ്രതീക്ഷിതമായ ടൈപ്പ് കോയർഷൻ ഒഴിവാക്കാൻ സ്ട്രിക്റ്റ് ഈക്വാലിറ്റി (`===`), സ്ട്രിക്റ്റ് ഇൻഈക്വാലിറ്റി (`!==`) എന്നിവ ഉപയോഗിക്കുക.
BigInt-ഉം Number-ഉം തമ്മിൽ മാറ്റുന്നത്
BigInt
-ഉം Number
-ഉം തമ്മിൽ നേരിട്ടുള്ള ഗണിത പ്രവർത്തനങ്ങൾ അനുവദനീയമല്ലെങ്കിലും, നിങ്ങൾക്ക് ഈ രണ്ട് ടൈപ്പുകൾക്കിടയിൽ മാറ്റങ്ങൾ വരുത്താം. എന്നിരുന്നാലും, ഒരു BigInt
വാല്യൂ `Number.MAX_SAFE_INTEGER`-നേക്കാൾ വലുതാണെങ്കിൽ, അതിനെ Number
-ലേക്ക് മാറ്റുമ്പോൾ കൃത്യത നഷ്ടപ്പെടാൻ സാധ്യതയുണ്ടെന്ന് ഓർക്കുക.
ഉദാഹരണങ്ങൾ:
const bigIntValue = 9007199254740991n; // Number.MAX_SAFE_INTEGER
const numberValue = Number(bigIntValue); // BigInt-നെ Number-ലേക്ക് മാറ്റുന്നു
console.log(numberValue); // ഔട്ട്പുട്ട്: 9007199254740991
const largerBigIntValue = 9007199254740992n; // Number.MAX_SAFE_INTEGER-നേക്കാൾ വലുതാണ്
const largerNumberValue = Number(largerBigIntValue);
console.log(largerNumberValue); // ഔട്ട്പുട്ട്: 9007199254740992 (കൃത്യമല്ലാതിരിക്കാം)
const numberToBigInt = BigInt(12345); // Number-നെ BigInt-ലേക്ക് മാറ്റുന്നു
console.log(numberToBigInt); // ഔട്ട്പുട്ട്: 12345n
ഉപയോഗങ്ങളും ഉദാഹരണങ്ങളും
ക്രിപ്റ്റോഗ്രഫി
ക്രിപ്റ്റോഗ്രാഫിക് അൽഗോരിതങ്ങൾ സുരക്ഷയ്ക്കായി പലപ്പോഴും വളരെ വലിയ പ്രൈം നമ്പറുകളെ ആശ്രയിക്കുന്നു. BigInt
ഈ സംഖ്യകളെ കാര്യക്ഷമമായി പ്രതിനിധീകരിക്കാനും കൈകാര്യം ചെയ്യാനും ഒരു മാർഗ്ഗം നൽകുന്നു.
// ഉദാഹരണം: ഒരു ലളിതമായ (സുരക്ഷിതമല്ലാത്ത) കീ പെയർ ജനറേറ്റ് ചെയ്യുന്നു
function generateKeyPair() {
const p = 281n; // ഒരു പ്രൈം നമ്പർ
const q = 283n; // മറ്റൊരു പ്രൈം നമ്പർ
const n = p * q; // മോഡുലസ്
const totient = (p - 1n) * (q - 1n); // ഓയ്ലറുടെ ടോഷ്യന്റ് ഫംഗ്ഷൻ
// 1 < e < totient, gcd(e, totient) = 1 ആകുന്ന രീതിയിൽ ഒരു e (പബ്ലിക് എക്സ്പോണന്റ്) തിരഞ്ഞെടുക്കുക
const e = 17n;
// (d * e) % totient = 1 ആകുന്ന രീതിയിൽ d (പ്രൈവറ്റ് എക്സ്പോണന്റ്) കണക്കാക്കുക
let d = 0n;
for (let i = 1n; i < totient; i++) {
if ((i * e) % totient === 1n) {
d = i;
break;
}
}
return {
publicKey: { n, e },
privateKey: { n, d },
};
}
const keyPair = generateKeyPair();
console.log("Public Key:", keyPair.publicKey);
console.log("Private Key:", keyPair.privateKey);
കുറിപ്പ്: ഇത് പ്രദർശന ആവശ്യങ്ങൾക്കുള്ള ഒരു ലളിതമായ ഉദാഹരണം മാത്രമാണ്. യഥാർത്ഥ ക്രിപ്റ്റോഗ്രഫിയിൽ ഇതിലും വലിയ പ്രൈം നമ്പറുകളും കൂടുതൽ സങ്കീർണ്ണമായ അൽഗോരിതങ്ങളും ഉപയോഗിക്കുന്നു.
സാമ്പത്തിക കണക്കുകൂട്ടലുകൾ
വലിയ തുകകൾ കൈകാര്യം ചെയ്യുമ്പോൾ, പ്രത്യേകിച്ച് അന്താരാഷ്ട്ര ഇടപാടുകളിൽ, കൃത്യത വളരെ പ്രധാനമാണ്. BigInt
-ന് റൗണ്ടിംഗ് പിശകുകൾ തടയാനും കൃത്യമായ കണക്കുകൂട്ടലുകൾ ഉറപ്പാക്കാനും കഴിയും.
// ഉദാഹരണം: കൂട്ടുപലിശ കണക്കാക്കുന്നു
function calculateCompoundInterest(principal, rate, time) {
const principalBigInt = BigInt(principal * 100); // സെന്റുകളിലേക്ക് മാറ്റുന്നു
const rateBigInt = BigInt(rate * 10000); // ശതമാനത്തിന്റെ പതിനായിരത്തിലൊന്നിലേക്ക് മാറ്റുന്നു
const timeBigInt = BigInt(time);
let amount = principalBigInt;
for (let i = 0n; i < timeBigInt; i++) {
amount = amount * (10000n + rateBigInt) / 10000n;
}
const amountInDollars = Number(amount) / 100;
return amountInDollars;
}
const principal = 1000000; // $1,000,000
const rate = 0.05; // 5% പലിശ നിരക്ക്
const time = 10; // 10 വർഷം
const finalAmount = calculateCompoundInterest(principal, rate, time);
console.log("അന്തിമ തുക:", finalAmount); // ഔട്ട്പുട്ട്: അന്തിമ തുക: 1628894.6267774413 (ഏകദേശം)
ഈ ഉദാഹരണത്തിൽ, കണക്കുകൂട്ടലുകൾക്കിടയിലുള്ള റൗണ്ടിംഗ് പിശകുകൾ ഒഴിവാക്കാൻ നമ്മൾ പ്രിൻസിപ്പലും റേറ്റും BigInt
വാല്യൂകളിലേക്ക് മാറ്റുന്നു. ഫലം പിന്നീട് പ്രദർശിപ്പിക്കുന്നതിനായി ഒരു Number
-ലേക്ക് തിരികെ മാറ്റുന്നു.
വലിയ ഐഡികൾ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു
ഡിസ്ട്രിബ്യൂട്ടഡ് സിസ്റ്റങ്ങളിൽ, ഒന്നിലധികം സെർവറുകളിലുടനീളം യുണീക് ഐഡികൾ ഉണ്ടാക്കുന്നത് വെല്ലുവിളിയാണ്. BigInt
ഉപയോഗിക്കുന്നത് കൂട്ടിമുട്ടാൻ സാധ്യതയില്ലാത്ത വളരെ വലിയ ഐഡികൾ സൃഷ്ടിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
// ഉദാഹരണം: ടൈംസ്റ്റാമ്പും സെർവർ ഐഡിയും അടിസ്ഥാനമാക്കി ഒരു യുണീക് ഐഡി ജനറേറ്റ് ചെയ്യുന്നു
function generateUniqueId(serverId) {
const timestamp = BigInt(Date.now());
const serverIdBigInt = BigInt(serverId);
const random = BigInt(Math.floor(Math.random() * 1000)); // കുറച്ച് റാൻഡംനെസ്സ് ചേർക്കുന്നു
// യുണീക് ഐഡി ഉണ്ടാക്കാൻ വാല്യൂകൾ സംയോജിപ്പിക്കുന്നു
const uniqueId = (timestamp << 20n) + (serverIdBigInt << 10n) + random;
return uniqueId.toString(); // എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാൻ ഒരു സ്ട്രിംഗായി തിരികെ നൽകുന്നു
}
const serverId = 123; // ഉദാഹരണ സെർവർ ഐഡി
const id1 = generateUniqueId(serverId);
const id2 = generateUniqueId(serverId);
console.log("യുണീക് ഐഡി 1:", id1);
console.log("യുണീക് ഐഡി 2:", id2);
BigInt-ഉം JSON-ഉം
BigInt
വാല്യൂകളെ JSON നേറ്റീവായി പിന്തുണയ്ക്കുന്നില്ല. JSON.stringify()
ഉപയോഗിച്ച് BigInt
അടങ്ങുന്ന ഒരു ജാവാസ്ക്രിപ്റ്റ് ഒബ്ജക്റ്റിനെ സീരിയലൈസ് ചെയ്യാൻ ശ്രമിച്ചാൽ ഒരു `TypeError` ലഭിക്കും. JSON-മായി പ്രവർത്തിക്കുമ്പോൾ BigInt
വാല്യൂകൾ കൈകാര്യം ചെയ്യാൻ നിങ്ങൾക്ക് രണ്ട് വഴികളുണ്ട്:
- സ്ട്രിംഗിലേക്ക് മാറ്റുക: സീരിയലൈസ് ചെയ്യുന്നതിനുമുമ്പ്
BigInt
-നെ ഒരു സ്ട്രിംഗിലേക്ക് മാറ്റുക. ഇതാണ് ഏറ്റവും സാധാരണവും ലളിതവുമായ സമീപനം. - കസ്റ്റം സീരിയലൈസേഷൻ/ഡീസീരിയലൈസേഷൻ:
BigInt
വാല്യൂകൾ കൈകാര്യം ചെയ്യാൻ ഒരു കസ്റ്റം സീരിയലൈസേഷൻ/ഡീസീരിയലൈസേഷൻ ഫംഗ്ഷൻ ഉപയോഗിക്കുക.
ഉദാഹരണങ്ങൾ:
സ്ട്രിംഗിലേക്ക് മാറ്റുക:
const data = {
id: 12345678901234567890n,
name: "Example Data",
};
// സീരിയലൈസ് ചെയ്യുന്നതിനുമുമ്പ് BigInt-നെ സ്ട്രിംഗിലേക്ക് മാറ്റുക
data.id = data.id.toString();
const jsonData = JSON.stringify(data);
console.log(jsonData); // ഔട്ട്പുട്ട്: {"id":"12345678901234567890","name":"Example Data"}
// ഡീസീരിയലൈസ് ചെയ്യുമ്പോൾ, സ്ട്രിംഗിനെ തിരികെ BigInt-ലേക്ക് മാറ്റേണ്ടിവരും
const parsedData = JSON.parse(jsonData, (key, value) => {
if (key === "id") {
return BigInt(value);
}
return value;
});
console.log(parsedData.id); // ഔട്ട്പുട്ട്: 12345678901234567890n
കസ്റ്റം സീരിയലൈസേഷൻ/ഡീസീരിയലൈസേഷൻ (`replacer`-ഉം `reviver`-ഉം ഉപയോഗിച്ച്):
const data = {
id: 12345678901234567890n,
name: "Example Data",
};
// കസ്റ്റം സീരിയലൈസേഷൻ
const jsonData = JSON.stringify(data, (key, value) => {
if (typeof value === 'bigint') {
return value.toString();
} else {
return value;
}
});
console.log(jsonData);
// കസ്റ്റം ഡീസീരിയലൈസേഷൻ
const parsedData = JSON.parse(jsonData, (key, value) => {
if (typeof value === 'string' && /^[0-9]+$/.test(value)) { // ഇതൊരു നമ്പറും സ്ട്രിംഗുമാണോ എന്ന് പരിശോധിക്കുക
try {
return BigInt(value);
} catch(e) {
return value;
}
}
return value;
});
console.log(parsedData.id);
ബ്രൗസർ കോംപാറ്റിബിലിറ്റി
BigInt
ആധുനിക ബ്രൗസറുകളിൽ വ്യാപകമായി പിന്തുണയ്ക്കുന്നു. എന്നിരുന്നാലും, പഴയ ബ്രൗസറുകളിലോ എൻവയോൺമെന്റുകളിലോ കോംപാറ്റിബിലിറ്റി പരിശോധിക്കേണ്ടത് അത്യാവശ്യമാണ്. ബ്രൗസർ പിന്തുണ ഉറപ്പുവരുത്താൻ നിങ്ങൾക്ക് Can I use പോലുള്ള ഒരു ടൂൾ ഉപയോഗിക്കാം. പഴയ ബ്രൗസറുകളെ പിന്തുണയ്ക്കേണ്ടതുണ്ടെങ്കിൽ, ഒരു പോളിഫിൽ ഉപയോഗിക്കുന്നത് പരിഗണിക്കാം, എന്നാൽ പോളിഫില്ലുകൾ പ്രകടനത്തെ ബാധിച്ചേക്കാമെന്ന് ഓർക്കുക.
പ്രകടനവുമായി ബന്ധപ്പെട്ട പരിഗണനകൾ
BigInt
വലിയ പൂർണ്ണസംഖ്യകളുമായി പ്രവർത്തിക്കാൻ ശക്തമായ ഒരു മാർഗ്ഗം നൽകുന്നുണ്ടെങ്കിലും, പ്രകടനത്തിൽ ഉണ്ടാകാവുന്ന പ്രത്യാഘാതങ്ങളെക്കുറിച്ച് അറിഞ്ഞിരിക്കേണ്ടത് പ്രധാനമാണ്.
BigInt
പ്രവർത്തനങ്ങൾ സാധാരണNumber
പ്രവർത്തനങ്ങളേക്കാൾ വേഗത കുറഞ്ഞതായിരിക്കാം.BigInt
-ഉംNumber
-ഉം തമ്മിൽ മാറ്റുന്നത് ഓവർഹെഡ് ഉണ്ടാക്കിയേക്കാം.
അതിനാൽ, ആവശ്യമുള്ളപ്പോൾ മാത്രം BigInt
ഉപയോഗിക്കുക, നിങ്ങൾ ധാരാളം BigInt
പ്രവർത്തനങ്ങൾ നടത്തുകയാണെങ്കിൽ പ്രകടനത്തിനായി നിങ്ങളുടെ കോഡ് ഒപ്റ്റിമൈസ് ചെയ്യുക.
ഉപസംഹാരം
BigInt
ജാവാസ്ക്രിപ്റ്റിന് ഒരു വിലപ്പെട്ട കൂട്ടിച്ചേർക്കലാണ്, ഇത് ഡെവലപ്പർമാരെ വലിയ പൂർണ്ണസംഖ്യ ഗണിതങ്ങൾ കൃത്യതയോടെ കൈകാര്യം ചെയ്യാൻ പ്രാപ്തരാക്കുന്നു. ഇതിന്റെ സവിശേഷതകൾ, പരിമിതികൾ, ഉപയോഗങ്ങൾ എന്നിവ മനസ്സിലാക്കുന്നതിലൂടെ, ക്രിപ്റ്റോഗ്രഫി, സാമ്പത്തിക കണക്കുകൂട്ടലുകൾ, ശാസ്ത്രീയ കമ്പ്യൂട്ടിംഗ് തുടങ്ങിയ വിവിധ മേഖലകളിൽ ശക്തവും കൃത്യവുമായ ആപ്ലിക്കേഷനുകൾ നിർമ്മിക്കാൻ നിങ്ങൾക്ക് BigInt
ഉപയോഗിക്കാം. നിങ്ങളുടെ പ്രോജക്റ്റുകളിൽ BigInt
ഉപയോഗിക്കുമ്പോൾ ബ്രൗസർ കോംപാറ്റിബിലിറ്റിയും പ്രകടനത്തിലെ പ്രത്യാഘാതങ്ങളും പരിഗണിക്കാൻ ഓർമ്മിക്കുക.
കൂടുതൽ വിവരങ്ങൾക്കായി
- Mozilla Developer Network (MDN) - BigInt
- V8 Blog - BigInt: Arbitrary-Precision Integers in JavaScript
ഈ ഗൈഡ് ജാവാസ്ക്രിപ്റ്റിലെ BigInt
-നെക്കുറിച്ചുള്ള ഒരു സമഗ്രമായ അവലോകനം നൽകുന്നു. കൂടുതൽ ആഴത്തിലുള്ള വിവരങ്ങൾക്കും നൂതന സാങ്കേതിക വിദ്യകൾക്കുമായി ലിങ്ക് ചെയ്ത ഉറവിടങ്ങൾ പരിശോധിക്കുക.